Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4J 3.x与2.x中的关系自动索引_Neo4j_Cypher - Fatal编程技术网

Neo4J 3.x与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 2.x中,我使用了关系的自动索引,这允许我根据索引的关系属性进行搜索

在Neo4J 3.x中,这不起作用

在Neo4J 2.x中,我在
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中执行相同的操作,但方式不同

是的,您必须手动为关系编制索引。 使用APOC
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
链接到文档:


此外,为了自动填充手动索引,您还可以使用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
文件中启用触发器)。