如何使用Neo4J Cypher在分页方式中进行广度优先搜索?
例如,我有以下顶点
Vertex A
,Vertex B1, B2, B3, ...., Bn
(m个B顶点),Vertex C1, C2, C3, ..., Cn
(n个C顶点)和Vertex D1, D2, D3, ..., Dn
(k个顶点)
现在A
是根,并且A的子代都是B顶点,并且对于每个B顶点,有n个C顶点作为子代,最后对于每个C顶点,有K D个顶点作为子代。所以方向就是从上到下。
现在,我想找出所有从说顶点C1开始的顶点,并以分页方式进行BFS,因为该图非常大。知道如何使用Cypher做到这一点吗?
答案 0 :(得分:1)
请记住,除非您具有ORDER BY子句,否则不能保证排序。
此外,Cypher扩展默认情况下使用DFS,只有shortestPath()和shortestPath()用法会使用BFS,并且这些不适用于这种情况。
您可以使用遍历API来更好地控制扩展的行为,该遍历API可以从存储过程中使用。幸运的是,APOC Procedures在其路径扩展程序中已经为您完成了此操作,并且默认使用BFS。
使用此过程时,您将要确保关系类型和方向正确。
比方说,您的图仅具有从根到叶的传出关系。在这种情况下,这是用法示例:
MATCH (start:Vertex {name:$startVertex})
CALL apoc.path.subgraphNodes(start, {relationshipFilter:'>'}) YIELD node
RETURN node
SKIP $skip
LIMIT 100
调用查询时,您可以传递startVertex
和skip
作为参数。