在查询路径中使用第一个关系来过滤其余的路径关系 - Neo4j

时间:2014-11-11 07:57:16

标签: neo4j

我找不到这个问题。我有以下图表

A-[x]->B
B-[y]->C
B-[x]->C
C-[y]->F
C-[x]->D

我想匹配A- [x] - > B- [x] - > C但是使用关系名称' x'在查询的第1部分找到 查询的B- [x] - > C部分中的A- [x] - > B。我有随机分配的关系类型,所以我需要构建一个非关系类型的查询,但是可以使用第一个匹配关系作为路径其余部分的关系类型。

有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

不幸的是,您无法参数化关系类型,因此查询必须更加复杂。

你可以从这样的事情开始:

MATCH (a:Node)-[r]-(b:Node)
WITH a, r, TYPE(r) AS type, b
MATCH path=b-[rr*]-c
WHERE ALL (rrtype IN RELATIONSHIPS(path) 
       WHERE type = TYPE(rrtype))
RETURN a, r, path

此查询符合您从ab的关系,并使用WITH运算符来继承初始关系的类型。然后,它会匹配从bc的所有可能路径。最后,WHERE ALL子句筛选出关系的 all 类型与原始关系类型不匹配的任何路径。

由于所有内容都不受约束,因此价格昂贵,因此请尽可能添加一些标签和关系类型(显然,添加abc的初始匹配代码