2017-02-17 43 views
-1

我有一個雙關係(頂點d) - [REL1] - >(頂點DB) - [REL2](頂點d)Neo4j的最短路徑並採用雙關係

我使用此需要兩個元件之間的最短路徑由d關係

試圖

MATCH (d:D{d_pk:1})-[r1:DgoDB*]->() 
MATCH p = allShortestPaths((ALL (RELATIONSHIP IN r1)->()) - [r2:DBgoD*] -> (to:D)) 
WHERE (to.d_pk = 70258) 
RETURN d, r1, p 

但卻沒有奏效。

有沒有人有任何想法?

+0

你能澄清你的模式多一點?你想找到的路徑是由兩種關係組成的(DgoDB和:DBgoD)以任何順序組成的?或者,它首先是一個路徑:DgoDB關係,然後剩下的路徑是:DBgoD關係?還是完全是另一回事? – InverseFalcon

+0

原始數據庫是關係型的。 Person表格的兩個元素和Type表格的元素之間存在3級關係[linked_to]。這種關係表明Person的元素與Person的另一個元素相連,並且類型爲Type,朋友,父親,兒子,母親,同學等; 在爲圖數據庫建模時,Person發起了頂點D,類型頂點B和[linked_to]關係起源的頂點數據庫以及邊[DgoDB],[DBgoB]和[DBgoD]。 現在我需要找到D的兩個元素之間的最短路徑,所以我需要從D-> DB然後DB-> D –

+0

我仍然試圖解析這個。同時,根據實際建模的內容選擇具有實際意義的節點標籤和關係類型是一個好主意。圖形數據庫往往善於更好地表達數據的含義以及數據的連接方式,但選擇過於抽象的標籤和類型會妨礙這些含義和連接的清晰。 – InverseFalcon

回答

0

如果我正確地理解你的模型(並且任何額外的說明都比歡迎),你正在尋找路徑:DgoDB和:DBgoD關係到達另一個節點。

如果只有:DgoDB關係連接:D到:DB節點,並且僅:DBgoD關係連接:DB到:D節點,那麼它應該足以僅指定您正在查找的可變長度模式因爲包括兩套關係。

這樣的事情,也許呢?

MATCH (d:D{d_pk:1}), (to:D{d_pk:70258}) 
MATCH p = allShortestPaths((d)-[r1:DgoDB|:DBgoD*]->(to)) 
RETURN d, r1, p 
+0

謝謝,這是正確 –

+0

我正在研究建模圖數據庫的四種不同方法,我已經通過四種方法轉換關係數據庫,現在我正在四個基地上運行查詢。在模型中,頂點B被關係中的參數代替,它保持DgoD並且在那裏變得更容易 –