Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Neo4J Cypher以分页方式进行广度优先搜索?_Neo4j - Fatal编程技术网

如何使用Neo4J Cypher以分页方式进行广度优先搜索?

如何使用Neo4J Cypher以分页方式进行广度优先搜索?,neo4j,Neo4j,如何使用Neo4J Cypher以分页方式进行广度优先搜索 例如,我有以下顶点 顶点A,顶点B1,B2,B3,…,Bn(MB顶点),顶点C1,C2,C3,…,Cn(NC顶点)和顶点D1,D2,D3,…,Dn(KD顶点) 现在A是根,A的子节点都是B顶点,每个B顶点都有n个C顶点作为子节点,最后每个C顶点都有K个D顶点作为子节点。所以方向就是从上到下 现在我想找出所有的顶点,从顶点C1开始,以分页的方式进行BFS,因为图是巨大的。你知道如何使用Cypher来实现这一点吗?请记住,除非你有order

如何使用Neo4J Cypher以分页方式进行广度优先搜索

例如,我有以下顶点

顶点A
顶点B1,B2,B3,…,Bn
(MB顶点),
顶点C1,C2,C3,…,Cn
(NC顶点)和
顶点D1,D2,D3,…,Dn
(KD顶点)

现在
A
是根,A的子节点都是B顶点,每个B顶点都有n个C顶点作为子节点,最后每个C顶点都有K个D顶点作为子节点。所以方向就是从上到下


现在我想找出所有的顶点,从顶点C1开始,以分页的方式进行BFS,因为图是巨大的。你知道如何使用Cypher来实现这一点吗?

请记住,除非你有orderby子句,否则不能保证排序

此外,默认情况下,Cypher扩展使用DFS,只有shortestPath()和shortestPath()使用BFS,这些不适用于这种情况

您可以使用遍历API对扩展的行为进行更多的控制,该API可以从存储过程中使用。谢天谢地,在它的路径扩展程序中已经为您完成了这项工作,并且默认使用BFS

在使用过程时,您需要确保关系类型和方向正确

假设您的图形只有从根到叶的传出关系。在这种情况下,下面是一个用法示例:

MATCH (start:Vertex {name:$startVertex})
CALL apoc.path.subgraphNodes(start, {relationshipFilter:'>'}) YIELD node
RETURN node
SKIP $skip
LIMIT 100

调用查询时,您可以将
startVertex
skip
作为参数传递。

谢谢。我该如何处理传入和传出的数据?为什么不将BFS扩展添加到Cypher?存储过程看起来更像胶水,而不是本机支持。。BFS具有更大的空间复杂性,这意味着它可以根据分支因子和深度为每个查询使用更多的堆。这就是说,更多的控制将是伟大的。随着我们接近NEO4J4.0,以及OpenCypher和GQL的发展,我们正在寻找更多控制扩展行为的选项。不确定它是否会最终出现在最终规范中,但我希望如此。如果你需要输入和输出,你可以完全不使用过滤器,但我认为这不是你想要的?它将扩展所有内容,树中可以到达的每个节点。是的,这就是我想要的,除了我想要以分页的方式,因为整个图可能是巨大的。