2014-05-08 27 views

回答

0

遍歷通常假定節點已連接;遍歷是指經過一些關係。如果你不能通過關係從A到B,那麼在同一個遍歷中你不能達到它們。

This method in the Java API會讓你瀏覽整個數據庫中的每一個節點,但它不會假定任何順序。

所以這取決於你的要求。一種做法可能是啓動匹配節點(即密碼中的MATCH n RETURN n或使用上述方法)。使用您遇到的每個節點作爲遍歷所有關係的基礎。保留已經遇到的節點ID列表。當您從遍歷一組節點返回時(返回到緩慢迭代的完整列表),然後跳過通過遍歷已經訪問的總列表中返回的任何節點。

所以,在僞代碼,像這樣:

HashSet<Long> seenIds = new HashSet<Long>(); 
for(Node n : allNodesInDatabase) { 
    if(seenIds.contains(n.getId()) continue; 
    traverse(n); 
} 

function traverse(n) { 
    // Use traversal framework to walk all relationships in/out of "n". 
    // Update "seenIds" with anything the traversal framework sees. 
} 

這會發現所有「斷開子圖」,並都確保您在數據庫中接觸的一切,但它是通過一些遍歷爲了你做定義。

+0

非常感謝您的回覆。由於這個圖中有很多節點,我不能把它們全部放在內存中。現在我試圖過濾一些無用的節點並使圖形變小。 – user3615912