2016-09-29 50 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

是的,確切地說。重複次數與方向正交。 –