在neo4j中,如何使用JAVA API遍历断开连接的图形?

时间:2014-05-08 10:26:59

标签: neo4j traversal java-api

neo4j手册,我知道如何使用Traversal Framework。 但是当Neo4j中的图表断开连接时,我不知道如何遍历所有节点。

2 个答案:

答案 0 :(得分:0)

我不认为可以使用遍历框架来完成。您可以使用GlobalGraphOperations.at(db).getAllNodes()访问所有节点。 http://api.neo4j.org/2.0.3/org/neo4j/tooling/GlobalGraphOperations.html

答案 1 :(得分:0)

遍历通常假设节点已连接;遍历是指遍历某些关系。如果你不能通过关系从A到B,那么你就无法在同一遍历中找到它们。

This method in the Java API将允许您浏览整个数据库中的每个节点,但它不会采取任何顺序。

所以这取决于你的要求。一种方法可能是开始匹配节点(即cypher中的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.
} 

这将发现所有“断开连接的子图”,并确保您触及数据库中的所有内容,但这是通过您定义的某些遍历顺序完成的。