如何使用Neo4J Cypher以分页方式进行广度优先搜索?
如何使用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
顶点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的发展,我们正在寻找更多控制扩展行为的选项。不确定它是否会最终出现在最终规范中,但我希望如此。如果你需要输入和输出,你可以完全不使用过滤器,但我认为这不是你想要的?它将扩展所有内容,树中可以到达的每个节点。是的,这就是我想要的,除了我想要以分页的方式,因为整个图可能是巨大的。