我有一个像附图一样的设置。橙色节点表示cases和蓝色节点表示表演者该案例中的各种活动。
我想依次查询每个案例。在每种情况下,我需要添加关系
[:RELATED {value: 1}]
from nodei to nodek , for all k that lies in between(nodes whose ID fall between i and j) those pair of Performer nodes (nodei,nodej) such that :
Name(nodei) == Name( nodej )
and
| ID(nodei) - ID(nodej) | >= 2
[示例和预期输出]:
-
在 Case1 中,由于 ID:1 和 ID:4 的 Performer 节点满足条件,因此在以下之间添加关系:
Node(ID:1) to Node(ID:2)
Node(ID:1) to Node(ID:3)
-
在 Case2 中,ID:2 和 ID:4 的 Performer 节点满足条件,因此在以下之间添加关系:
Node(ID:2) to Node(ID:3)
-
在 Case3 中,有两组满足条件的节点,
A。对于 Node(ID:1) 和 Node(ID:4) 添加关系
Node(ID:1) to Node(ID:2)
Node(ID:1) to Node(ID:3)
b.对于节点(ID:3)和节点(ID:5),添加关系
Node(ID:3) to Node(ID:4)
针对上述情况制定 CYPHER 查询时需要的提示。
提前致谢。
正如问题评论中提到的,您的计算应该相反:
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)