繁体   English   中英

Neo4J 3.x和2.x中的关系自动索引

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM