Neo4J 3.x与2.x中的关系自动索引
在Neo4J 2.x中,我使用了关系的自动索引,这允许我根据索引的关系属性进行搜索 在Neo4J 3.x中,这不起作用 在Neo4J 2.x中,我在Neo4J 3.x与2.x中的关系自动索引,neo4j,cypher,Neo4j,Cypher,在Neo4J 2.x中,我使用了关系的自动索引,这允许我根据索引的关系属性进行搜索 在Neo4J 3.x中,这不起作用 在Neo4J 2.x中,我在Neo4J属性中设置: relationship\u auto\u index=true 并设置要使用索引的关系的若干属性 relationship\u keys\u indexable=用户、上下文、语句、间隙扫描 然后,我将使用旧的1.x Cypher查询首先识别类型为到的用户建立的所有关系,读取其上下文属性,然后将其与具有特定上下文属性的节点进
Neo4J属性中设置:
relationship\u auto\u index=true
并设置要使用索引的关系的若干属性
relationship\u keys\u indexable=用户、上下文、语句、间隙扫描
然后,我将使用旧的1.x Cypher查询首先识别类型为到的用户建立的所有关系,读取其上下文属性,然后将其与具有特定上下文属性的节点进行匹配,然后从该用户创建的上下文中匹配节点并检索它们。这个查询看起来像
START rel=relationship:relationship_auto_index(user='userid'),其中TYPE(rel)='TO'与DISTINCT rel匹配(ctx:Context),其中rel.Context=ctx.uid与(ctx.name=“neo4j3”)返回DISTINCT STARTNODE(rel)。uid作为源_id,STARTNODE(rel)。name作为源_名称,ENDNODE(rel)。uid作为目标_id,ENDNODE(rel)。name作为目标_name,rel.uid作为edge\u id,ctx.name作为context\u name,rel.statement作为statement\u id,rel.weight作为weight代码>
在Neo4J 3.x中,这个查询不起作用,我相信索引是以不同的方式完成的
我有两个问题:
1) 我必须手动索引关系,还是在3.x中自动索引关系
2) 我将使用什么查询来代替使用关系属性进行搜索?您可以在3.X中执行相同的操作,但方式不同
是的,您必须手动为关系编制索引。
使用APOCAPOC
可以为您的关系创建手动索引
这是用于填充索引的查询:
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
链接到文档:
此外,为了自动填充手动索引,您还可以使用apoc()创建触发器。太好了,谢谢,@logisima。我唯一的更正是,我的请求应该修改为调用apoc.index.relationships('my_relationships','user:userid')产生rel,start,end,并使用DISTINCT rel,start,end匹配(ctx:Context),其中rel.Context=ctx.uid和(ctx.name=“neo4j3”)返回DISTINCT start.uid作为源_id,start.name作为源_名称,end.uid作为目标标识,end.name作为目标标识,rel.uid作为边缘标识,ctx.name作为上下文标识,rel.statement作为语句标识,rel.weight作为权重代码>我找不到如何填充关系的手动索引。。。在那里看不到任何例子。。。我理解这个概念,但他们没有谈论关系指数触发器,我知道了。必须运行类似于调用apoc.trigger.add('Index-to-Relationships'),“将{createdRelationships}作为r匹配展开()-[r:to]>()调用apoc.Index.addRelationship(r,['user'])返回计数(*),{phase:'after'}
来添加关系上的索引。(首先在conf
文件中启用触发器)。