📜  Neo4j-索引(1)

📅  最后修改于: 2023-12-03 15:33:05.877000             🧑  作者: Mango

Neo4j 索引

Neo4j 是一款图形数据库,它的数据模型以图形为中心,用节点和关系来表示数据。在 Neo4j 中,索引用于查找节点,它可以大大提高查询节点的速度。

Neo4j 支持两种类型的索引:节点索引和关系索引。

节点索引

节点索引可以用于查找具有特定属性值的节点。在 Neo4j 中,可以使用以下类型的节点索引:

  • 基于属性的索引
  • 全文索引
基于属性的索引

基于属性的索引是最常见的类型,它可以用于查找具有特定属性值的节点。属性索引可以使用以下类型的属性:

  • 字符串
  • 数字
  • 布尔值
  • 日期

使用基于属性的索引需要创建一个索引并将其附加到属性上。以下是一个使用 Cypher 创建基于属性的索引的示例:

CREATE INDEX ON :Person(name)

以上示例中,将在 Person 节点的 name 属性上创建一个索引。

为了使用基于属性的索引,可以使用 MATCH 语句加上 WHERE 子句,例如:

MATCH (p:Person)
WHERE p.name = 'John'
RETURN p

以上示例中,将返回具有名为 Johnname 属性的所有 Person 节点。

全文索引

全文索引用于搜索节点中的文本内容。使用全文索引需要使用 db.index.fulltext.createNodeIndex 创建索引。以下是一个使用 Cypher 创建全文索引的示例:

CALL db.index.fulltext.createNodeIndex("myIndex", ["Person"], ["name", "description"])

以上示例中,将为 Person 节点的 namedescription 属性创建一个名为 myIndex 的全文索引。

为了使用全文索引,可以使用 MATCH 语句加上 WHERE 子句,例如:

MATCH (p:Person)
WHERE p.name CONTAINS 'John'
RETURN p

以上示例中,将返回具有名为 Johnname 属性的所有 Person 节点。

关系索引

关系索引用于查找具有特定属性值的关系。在 Neo4j 中,关系索引可以使用以下类型的关系:

  • 字符串
  • 数字
  • 布尔值
  • 日期

使用关系索引需要创建一个索引并将其附加到关系上。以下是一个使用 Cypher 创建关系索引的示例:

CREATE INDEX ON :KNOWS(since)

以上示例中,将在 KNOWS 关系的 since 属性上创建一个索引。

为了使用关系索引,可以使用 MATCH 语句加上 WHERE 子句,例如:

MATCH (a)-[r:KNOWS]->(b)
WHERE r.since > 2010
RETURN a, b, r

以上示例中,将返回所有 since 属性大于 2010 的 KNOWS 关系。

总结

索引在 Neo4j 中被广泛使用,可以大大提高查询节点的速度。可以使用基于属性的索引和全文索引来查找具有特定属性值的节点,也可以使用关系索引来查找具有特定属性值的关系。