2016-09-29 152 views
0

我有以下简单的Neo4j图结构:如何匹配neo4j中的可变长度模式?

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

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

我希望能够找到连接(start:A)和(end: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) 

这基本上可以归结为这些模式:[ABA],[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; 

回答

2

因为你需要或者按照一个方向的关系,那么其他的,你必须从查询跌落方向:

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

不幸的是,你不能(但)宣布一个可重复的模式,只有可重复的关系。

+0

好的,谢谢。所以0..n中的n是我们想要在任一方向看到这种关系的最大次数? – Jay

+0

是的,确切地说。重复次数与方向正交。 –