【问题标题】:Does neo4j auto index work for MATCH clause?neo4j 自动索引是否适用于 MATCH 子句?
【发布时间】:2025-11-24 08:45:01
【问题描述】:

我们已为节点和关系启用自动索引。默认情况下,NEO4J 将为节点创建一个名为“node_auto_index”的索引,为关系创建一个名为“relationship_auto_index”的索引。但 MATCH 查询似乎表现不佳(与 Elasticsearch 中的类似数据集相比)。看起来他们没有使用索引。

有没有办法让 MATCH 子句使用 auto_index ?

我们还尝试查看架构索引。看起来它只能创建节点索引。我们的查询在关系上使用了一些属性,因此即使在使用模式索引之后,查询的性能也是不可接受的。 有没有办法创建模式关系索引?

【问题讨论】:

  • 你能更新你的帖子并包含查询吗?

标签: lucene neo4j


【解决方案1】:

node_auto_index 不用于匹配,您必须使用 start 子句来访问该旧索引。

例如

START user=node:node_auto_index(name="Siddarth")
MATCH (user)-[:KNOWS]->(friend)
RETURN friend

在 Neo4j 2.0 中,您可以改为创建索引或唯一约束

create index on :User(name);

然后在 MATCH 中使用它

MATCH (user:User {name:"Siddarth"})-[:FRIEND]->(friend)
RETURN friend

另见手册:http://docs.neo4j.org/chunked/milestone/query-schema-index.html 和密码参考卡:http://neo4j.org/resources/cypher

【讨论】:

  • 我尝试了以下方法:欢迎使用 Neo4j Shell!输入“帮助”以获得命令列表注意:远程 Neo4j 图形数据库服务“shell”在端口 1337 neo4j-sh (?)$ schema Indexes ON :order(scheduleDate) ONLINE No constraints neo4j-sh (?)$ start n = node:order("scheduleDate:54647") return n; MissingIndexException: Index order` 不存在` 因此,虽然模式命令显示索引可用,但 start 子句找不到该索引.是不是 start 子句只能用于自动索引而不是模式索引?
  • 开始子句只能使用自动索引。它不适用于架构索引。我尝试了一些例子,发现确实如此。