2017-07-03 183 views
2

我一直試圖使用neo4j及其apoc進程庫來獲得2個節點之間的最短路徑。
例如我創建2個節點,如下Apoc Dijkstra在計算最短路徑時在兩個方向上遍歷

CREATE (:Point {title:'A'}) 
CREATE (:Point {title:'B'}) 

然後我建立它們作爲這樣

MATCH (u1:Point {title:'A'}), (u2:Point {title: 'B'}) 
CREATE (u1)-[:distance {value:10}]->(u2) 

現在我已經建立從A到B的有向關係,而不是相反的關係。 因此,當我打電話APOC Dijkstra算法如下

MATCH (start:Point {title: 'B'}), (end:Point {title: 'B'}) 
CALL apoc.algo.dijkstra(start, end, 'distance', 'value') YIELD path, weight 
RETURN path, weight 

我不應該得到任何結果作爲他們的是從B到A沒有直接路徑,但我得到了相同的結果,當我使用運行查詢從A到B的路徑。

有人能告訴我爲什麼是這樣嗎? Dijkstra爲什麼不理會方向?任何幫助將非常感激。

回答

2

您需要將><添加到查詢中的關係類型。

MATCH (start:Point {title: 'B'}), (end:Point {title: 'B'}) 
CALL apoc.algo.dijkstra(start, end, 'distance>', 'value') YIELD path, weight 
RETURN path, weight 
+1

非常感謝。我不知道是不是因爲我對Neo4j沒有經驗,但是我在apoc文檔中找不到任何這樣的細節。 – MrRo