在neo4j中,如何使用javaapi?;

在neo4j中,如何使用javaapi?;,neo4j,traversal,java,Neo4j,Traversal,Java,从neo4j手册中,我知道如何使用遍历框架。 但是当我在Neo4j中的图形断开连接时,我不知道如何遍历所有节点。我认为使用遍历框架无法做到这一点。您可以使用GlobalGraphOperations.at(db).getAllNodes()访问所有节点 遍历通常假定节点是连接的;遍历指的是遍历一组关系。如果不能通过关系从A到B,那么就不能在同一个遍历过程中同时到达它们 将允许您遍历整个数据库中的每个节点,但不会采用任何顺序 所以这取决于你的要求。一种方法是开始匹配节点(即,在cypher中使用M

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

我认为使用遍历框架无法做到这一点。您可以使用GlobalGraphOperations.at(db).getAllNodes()访问所有节点

遍历通常假定节点是连接的;遍历指的是遍历一组关系。如果不能通过关系从A到B,那么就不能在同一个遍历过程中同时到达它们

将允许您遍历整个数据库中的每个节点,但不会采用任何顺序

所以这取决于你的要求。一种方法是开始匹配节点(即,在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.
} 
HashSet seenIds=newhashset();
对于(节点n:allNodesInDatabase){
如果(seenIds.contains)(n.getId())继续;
导线(n);
} 
函数遍历(n){
//使用遍历框架遍历“n”中的所有关系。
//使用遍历框架看到的任何内容更新“seenIds”。
} 

这将发现所有“断开连接的子图”这两种方法都可以确保您可以触摸数据库中的所有内容,但这是通过您定义的遍历顺序完成的。

非常感谢您的回复。由于此图中有这么多节点,我无法将它们全部放入内存中。现在,我正试图筛选一些无用的节点,并使图变小。