Neo4j 关系属性手册索引

Neo4j Manual Index on Relationship Properties

我打算在我的应用程序中尝试 Neo4j Manual Index on Relationship Properties in order to fix the performance issue I faced Neo4j Cypher query performance optimization

我有几个问题在 Neo4j 的官方文档中不是很清楚:

MATCH (:Flight)-[r:DESTINATION]->(:Airport)
CALL apoc.index.addRelationship(r,['taxi_time'])
RETURN count(*)

The statement will create the relationship index with the same name as relationship-type, in this case DESTINATION and add the relationship by its properties to the index.

  1. 我什么时候需要创建这个关系索引?它应该完成一次(比方说在应用程序启动时),或者我是否需要在每次在 FlightAirport 节点之间添加新的 -[r:DESTINATION]-> 关系时调用此 APOC 函数?

  2. 如果现有-[r:DESTINATION]->关系更新,如何在相应的手动索引中更新此信息?

  3. 如果要删除某些 FlightAirport 节点 - 我是否需要手动查找并从手动索引中删除适当的 -[r:DESTINATION]-> 关系或它APOC 和 Neo4j 会自动完成吗?

  4. 如果是 Spring Data Neo4j 项目 - 如何正确执行包含 APOC 函数的查询?例如,我想调用 apoc.index.addRelationship 以便为关系属性创建手动索引。我可以为此目的使用 org.neo4j.ogm.session.Session.query 吗?

  5. 手动索引使用的一致性模型是什么-它们在索引和原始数据之间使用最终一致性还是强一致性模型?

我同意 Neo4J 关于此问题的文档确实不足。

回答您的问题:

1.If 您从使用自动关系索引的旧版本升级了 Neo4J,您需要 运行 APOC(仅一次)使用

之类的东西来索引您现有的关系

MATCH ()-[r]->() CALL apoc.index.addRelationship(r,['property_1','property_2']) RETURN count(*);

然后您需要为您添加到该索引的任何新关系设置触发器,运行像这样一次:

CALL apoc.trigger.add('RELATIONSHIP_INDEX',"UNWIND {createdRelationships} AS r MATCH ()-[r]->() CALL apoc.index.addRelationship(r,['property_1','property_2']) RETURN count(*)", {phase:'after'})

(您需要先激活 neo4j.conf 文件中的 apoc.trigger.enabled=true

2.See以上

3.You 也需要从索引中删除它们,它不会自动完成。为此,使用 removeRelationshipByName() 设置 APOC 触发器。

4.Should有可能。

来自 Neo4J 的

5.Somebody 应该回答这个问题。

希望这对您有所帮助并节省一些时间!