[英]Relationship auto-indexing in Neo4J 3.x vs 2.x
在Neo4J 2.x中,我使用了关系的自动索引,然后允许我根据已索引的关系属性进行搜索。
在Neo4J 3.x中,此功能无效。
在Neo4J 2.x中,我设置为neo4j properties
:
relationship_auto_indexing=true
并设置要使用的索引关系的几个属性
relationship_keys_indexable=user,context,statement,gapscan
然后,我将使用旧的1.x Cypher查询来首先识别类型为TO
的用户所建立的所有关系,读取其上下文属性,然后将其与具有特定Context属性的节点进行匹配,然后从该节点中进行匹配。该用户所做的上下文并检索它们。 查询看起来像
START rel=relationship:relationship_auto_index(user='userid') WHERE TYPE(rel)='TO' WITH DISTINCT rel MATCH (ctx:Context) WHERE rel.context = ctx.uid AND (ctx.name="neo4j3" ) RETURN DISTINCT STARTNODE(rel).uid AS source_id, STARTNODE(rel).name AS source_name, ENDNODE(rel).uid AS target_id, ENDNODE(rel).name AS target_name, rel.uid AS edge_id, ctx.name AS context_name, rel.statement AS statement_id, rel.weight AS weight;
在Neo4J 3.x中,此查询不起作用,并且我相信索引的处理方式有所不同。
我有两个问题:
1)我必须手动建立索引关系还是在3.x中自动完成?
2)我将使用什么查询代替START rel=....
使用关系属性进行搜索的替代方法?
您可以在3.X中执行相同的操作,但是要有所不同。
是的,您必须手动为关系建立索引。 使用APOC
您可以为您的关系创建手动索引。
这是填充索引的查询:
MATCH ()-[r:MY_RELATIONSHIPS]->()
CALL apoc.index.addRelationship(r,['user'])
RETURN count(*)
然后,您可以检索到以下关系:
CALL apoc.index.relationships('MY_RELATIONSHIPS','userid:userid') YIELD rel, start , end
RETURN rel, start, end
链接到文档: https : //neo4j-contrib.github.io/neo4j-apoc-procedures/#_using_manual_index_on_relationship_properties
此外,要自动填充手动索引,您还可以使用apoc创建触发器( https://neo4j-contrib.github.io/neo4j-apoc-procedures/#_triggers_examples )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.