2016-05-13 132 views
0

我正在使用OrientDB Community Edition 2.1.16。從節點檢索所有路徑

這是我的數據的圖表:

enter image description here

我試圖使用檢索給定節點的所有路徑:

select $path from (traverse out('E1') from #13:5) 

但我得到它是相當奇怪:

enter image description here

我可以預料,通過二級節點(#13:1,#13:2,#13:3)的每條路徑都會到達根節點(#13:0)。 喜歡的東西:

(#13:5).out[0](#13:4).out[0](#13:1).out[0](#13:0) 
(#13:5).out[0](#13:4).out[1](#13:2).out[0](#13:0) 
(#13:5).out[0](#13:4).out[2](#13:3).out[0](#13:0) 

它是正確的還是什麼?

如果是,是否有可能得到這個結果? 我的意思是從#13:5到#13:0通過第二層節點的完整路徑。

感謝

回答

0

你得到的結果取決於策略有遍歷,你可以設置兩種類型:DEPTH_FIRST,默認和BREADTH_FIRST。我想也許你對這兩種策略感興趣。欲瞭解更多信息,你可以看看link

DEPTH_FIRST戰略

這是遍歷使用OrientDB默認策略。它在回溯之前儘可能沿每個分支進行探索。它使用遞歸實現。瞭解更多Depth-First算法。下面同時使用DEPTH_FIRST策略遍歷圖執行的有序步驟:

深度優先樹 enter image description here

BREADTH_FIRST戰略

它檢查所有相鄰節點,然後爲每個反過來這些鄰居節點的它檢查未訪問的鄰居節點,等等。將BREADTH_FIRST與等效的,但更具記憶效率的迭代深化DEPTH_FIRST搜索和DEPTH_FIRST搜索進行比較。瞭解更多關於廣度優先算法的信息。下面在遍歷使用BREADTH_FIRST戰略圖表執行的有序步驟:

廣度優先樹 enter image description here

0

使用查詢

select $path from (traverse out('E1') from #13:5) 

你相對於橫向的每個結果的路徑獲得,你可以驗證通過加入*

select *,$path from (traverse out('E') from #9:5) 

在th是你得到遍歷的所有頂點和從起始節點到達那裏的路徑。

相關問題