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.
我什么时候需要创建这个关系索引?它应该完成一次(比方说在应用程序启动时),或者我是否需要在每次在 Flight
和 Airport
节点之间添加新的 -[r:DESTINATION]->
关系时调用此 APOC 函数?
如果现有-[r:DESTINATION]->
关系更新,如何在相应的手动索引中更新此信息?
如果要删除某些 Flight
或 Airport
节点 - 我是否需要手动查找并从手动索引中删除适当的 -[r:DESTINATION]->
关系或它APOC 和 Neo4j 会自动完成吗?
如果是 Spring Data Neo4j 项目 - 如何正确执行包含 APOC 函数的查询?例如,我想调用 apoc.index.addRelationship
以便为关系属性创建手动索引。我可以为此目的使用 org.neo4j.ogm.session.Session.query
吗?
手动索引使用的一致性模型是什么-它们在索引和原始数据之间使用最终一致性还是强一致性模型?
我同意 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 应该回答这个问题。
希望这对您有所帮助并节省一些时间!
我打算在我的应用程序中尝试 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.
我什么时候需要创建这个关系索引?它应该完成一次(比方说在应用程序启动时),或者我是否需要在每次在
Flight
和Airport
节点之间添加新的-[r:DESTINATION]->
关系时调用此 APOC 函数?如果现有
-[r:DESTINATION]->
关系更新,如何在相应的手动索引中更新此信息?如果要删除某些
Flight
或Airport
节点 - 我是否需要手动查找并从手动索引中删除适当的-[r:DESTINATION]->
关系或它APOC 和 Neo4j 会自动完成吗?如果是 Spring Data Neo4j 项目 - 如何正确执行包含 APOC 函数的查询?例如,我想调用
apoc.index.addRelationship
以便为关系属性创建手动索引。我可以为此目的使用org.neo4j.ogm.session.Session.query
吗?手动索引使用的一致性模型是什么-它们在索引和原始数据之间使用最终一致性还是强一致性模型?
我同意 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 应该回答这个问题。
希望这对您有所帮助并节省一些时间!