查询neo4j中的特定于案例的节点

时间:2014-12-30 20:06:45

标签: neo4j cypher

我有一个像附加图像的设置。 橙色节点表示个案蓝色节点表示该案例中各种活动的表演者

Case specifics nodes

我想依次查询每个案例。在每种情况下,我都需要添加关系

[:RELATED {value: 1}] 

节点 i 节点 k ,对于位于其间的所有k(ID下降的节点)在i和j之间)那些Performer节点(节点 i 节点 j ),这样: />
名称(节点 i == 名称(节点 j

| ID(节点 i ) - ID(节点 j )| > = 2



[示例和预期输出]:

  1. 在Case1中,由于ID为1且ID:4的Performer节点满足条件,因此在以下各项之间添加关系:

           Node(ID:1) to Node(ID:2)
    
           Node(ID:1) to Node(ID:3)
    

    1. 在Case2中,ID为2且ID:4的Performer节点满足条件,因此在以下各项之间添加关系:

             Node(ID:2) to Node(ID:3)
      

      1. 在Case3中,有两组节点满足条件,

        一个。对于节点(ID:1)和节点(ID:4),添加来自

        的关系
               Node(ID:1) to Node(ID:2)
        
               Node(ID:1) to Node(ID:3)
        

        湾对于节点(ID:3)和节点(ID:5),添加来自

        的关系
               Node(ID:3) to Node(ID:4)
        
      2. 在为上述案例制定CYPHER查询时需要提示。

        提前致谢。

1 个答案:

答案 0 :(得分:3)

正如问题评论中提到的,您的计算应该颠倒过来:

node j - node i >= 2

对于案例3,更多一点,按照您的解释,节点2和3之间应该存在第三种关系

这是我做的一个查询,您可以在这个neo4j控制台中测试它:http://console.neo4j.org/r/gpfesu

MATCH (n:Case) 
MATCH path=(pe)<--(n)-->(pe2)
WHERE pe.name = pe2.name
AND pe2.id - pe.id >= 2
WITH path,n, (pe2.id - pe.id) as length
WITH range(head(nodes(path)).id+1, last(nodes(path)).id-1) as ids,
     n, 
     head(nodes(path)).id as starter,
     length
UNWIND ids as x
MATCH (perf:Performer {id:starter})<--(n)-->(perf2:Performer {id:x})
MERGE (perf)-[:RELATES_TO {value:1, length:length}]->(perf2)