从neo4j
手册,我知道如何使用Traversal Framework。
但是当Neo4j
中的图表断开连接时,我不知道如何遍历所有节点。
答案 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.
}
这将发现所有“断开连接的子图”,并确保您触及数据库中的所有内容,但这是通过您定义的某些遍历顺序完成的。