2017-05-25 202 views
0

我有一個關於Neo4j的非常基本的問題。Neo4j - 如何找到兩個節點之間的最短路徑

我已經導入一個簡單的數據集包含多個節點爲「example_nodes」,像這樣:

sourceIdtargetId

因此,我的數據庫擁有的源和目標簡單的兩列的表。

如何找到任意sourceIdtargetId之間的最短路徑?

我最初的嘗試是沿着線:

MATCH (source:example_nodes),(target:example_nodes), 
p = shortestPath((source)--(target)) 
WHERE (source.sourceId) = 1234 AND (target.targetId) = 5678 
return p 

不返回任何記錄,我可以清楚地看到在我的數據庫中的第一行是本身的單一路徑:

{"sourceId":"1234","targetId":"5678"}

我在做什麼錯?我是否需要創建所有的關係之前,我可以運行一個查詢(因爲所有我目前做的是進口的節點和創建索引)

+0

是的,對於最短路徑查詢,您首先需要路徑,因此在您將關係導入圖形之前不要嘗試查詢。 – InverseFalcon

回答

1

你應該找到sourcetarget第一,然後調用shortestpath

MATCH (source:example_nodes),(target:example_nodes) 
WHERE source.sourceId = 1234 AND target.targetId = 5678 
MATCH p = shortestPath((source)-[*]-(target)) 
return p; 

如果此查詢運行時間過長,請嘗試限制搜索的最大路徑長度。例如,使用[*..8]將長度限制爲8.

+0

其實我認識到的一件事就是目標應該是'target.sourceId'不應該嗎?也就是說,修改它仍然不會返回任何記錄,是因爲我沒有創建關係? – waffl

+0

如果你沒有這種關係,那麼當然你不會找到任何:-)。 – cybersam

+0

請澄清你的意思是「目標應該是target.sourceId」。就我的理解你的用例而言,我的答案中的查詢是有效的。 – cybersam

相關問題