2017-01-16 66 views
0

想象一下,我有下面的圖:Neo4j的 - 使用Cypher支架返回現有路徑的列表

graph

忽略的關係的曲線圖的3-> 2和4-> 3,以保持它樹狀結構。

說明:在我的情況下,這種類型的關係(4-> 3,3-> 4)將不存在。

是否可以使用Cypher返回圖表中所有現有路徑的「列表」?

示例上方的圖表:

結果:1-2,1-3,1-3-4

優選地,它應該是深度優先

回答

0

這不是Cypher的主要用例,所以它不會表現得很好,但它是可能的。

實施例的數據集:

CREATE 
    (n1:Node {name: 'n1'}), 
    (n2:Node {name: 'n2'}), 
    (n3:Node {name: 'n3'}), 
    (n4:Node {name: 'n4'}), 
    (n1)-[:REL]->(n2), 
    (n1)-[:REL]->(n3), 
    (n3)-[:REL]->(n4) 

查詢,使用path variable

MATCH p=(a)-[*]->(b) RETURN p 

結果:

╒════════════════════════════════════════════╕ 
│p           │ 
╞════════════════════════════════════════════╡ 
│[{name: n1}, {}, {name: n2}]    │ 
├────────────────────────────────────────────┤ 
│[{name: n1}, {}, {name: n3}]    │ 
├────────────────────────────────────────────┤ 
│[{name: n3}, {}, {name: n4}]    │ 
├────────────────────────────────────────────┤ 
│[{name: n1}, {}, {name: n3}, {}, {name: n4}]│ 
└────────────────────────────────────────────┘ 

作爲Cypher支架是說明性語言,有至沒有選項執行廣度/深度優先遍歷。但是,爲了這個目的Neo4j提供了一個traversal framework,你可能會覺得有用。

+0

謝謝,這工作完美。如果你不介意我問(我注意到你是圖形處理方面的博士生),我是否能夠顯示哪些圖形有一些圖案?我的意思是,假設我有其他類似於我所展示的圖形,但有一些細微的差異,我想查找具有給定圖案的每個圖(假設它們都有一個像1一樣的根節點)。例如。如果我的數據庫只有上面的圖表,並且我會搜索所有具有模式3 - > 4的圖表,則返回值爲1.預先感謝 –

+0

我不確定我是否完全理解該問題,但可以輕鬆搜索具體模式,例如'MATCH({name:'n3'}) - [] - >({name:'n4'})RETURN *'並檢查是否有結果。 –