寻找NEO4j中两个节点之间的间接路径

时间:2017-08-30 10:10:58

标签: neo4j path cypher

我使用密码查询使用密码查询查找两个节点之间的路径

Match p =  (n{ConceptID: 'C0000039'})-[r]-()-[s]- (m) 
WHERE r.RelationLabel CONTAINS "may_be_treat" or s.RelationLabel CONTAINS "may_be_treat"
RETURN p

但是这个查询可以返回最大深度为2的路径,如何在此查询中将路径作为变量(2,3,4,5,6),条件为r.RelationLabel CONTAINS" may_be_treat&# 34;

2 个答案:

答案 0 :(得分:3)

您可以使用variable-length pattern matching

如果您需要nn1之间的所有关系都有一个名为RelationLabel的属性,CONTAINS值为" may_be_treat",那么您可以结合使用ALL功能。

Match p =  (n{ConceptID: 'C0000039'})-[*]-(m) 
WHERE ALL (r IN relationships(p) WHERE r.RelationLabel CONTAINS "may_be_treat")
RETURN p

如果只有一个与RelationLabel的关系,那就是" may_be_treat"已经足够了,那么你可以改用ANY函数。

Match p =  (n{ConceptID: 'C0000039'})-[*]-(m) 
WHERE ANY (r IN relationships(p) WHERE r.RelationLabel CONTAINS "may_be_treat")
RETURN p

答案 1 :(得分:1)

@Bruno Peres' answer is right.
如果你想要控制路径的长度,你可以添加一个显式的可变长度模式匹配

Match p =  (n{ConceptID: 'C0000039'})-[*1..5]-(m) 
WHERE ANY (r IN relationships(p) WHERE r.RelationLabel CONTAINS "may_be_treat")
RETURN p

或使用length路径功能。

Match p =  (n{ConceptID: 'C0000039'})-[*]-(m) 
WHERE length(p) < 5 AND ANY (r IN relationships(p) WHERE r.RelationLabel CONTAINS "may_be_treat")
RETURN p