如何匹配neo4j中的可变长度模式?

时间:2016-09-29 15:10:05

标签: neo4j cypher

我有以下简单的neo4j图结构:

(A)-[:A_TO_B]->(B)

任何(B)节点只能有2个(A)节点指向它,同时任何(A)节点都可以指向大约20个(B)节点。

我希望能够找到连接(开始:A)和(结束:A)到指定深度的路径,并返回路径中的所有节点和关系。例如:

1. (start:A)-[:A_TO_B]->(B)<-[:A_TO_B]-(end:A)
2. (start:A)-[:A_TO_B]->(B)<-[:A_TO_B]-(A)-[:A_TO_B]->(B)<-[:A_TO_B]-(end:A)
3. (start:A)-[:A_TO_B]->(B)<-[:A_TO_B]-(A)-[:A_TO_B]->(B)<-[:A_TO_B]-(A)-[:A_TO_B]->(B)<-[:A_TO_B]-(end:A)

这基本上归结为这些模式:[A B A],[A BAB A],[A BABAB A] ......

以下是我不成功的尝试:

MATCH path=(start:A)-[:A_TO_B*0..2]->(end:A)
RETURN path;

MATCH path=(start:A)-[:A_TO_B*0..2]->(B)<-[:A_TO_B*0..2]-(end:A)
RETURN path;

MATCH path=(start:A)-[:A_TO_B*0..2]->(A)<-[:A_TO_B*0..2]-(end:A)
RETURN path;

1 个答案:

答案 0 :(得分:2)

因为你需要在一个方向上跟随另一个方向关系,你必须从查询中删除方向:

MATCH path = (start:A)-[:A_TO_B*0..2]-(end:A)
RETURN path;

不幸的是,你不能(还)声明一个可重复的模式,只有可重复的关系。