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

时间:2019-07-09 09:25:36

标签: neo4j

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

例如,我有以下顶点

Vertex AVertex 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做到这一点吗?

1 个答案:

答案 0 :(得分:1)

请记住,除非您具有ORDER BY子句,否则不能保证排序。

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

您可以使用遍历API来更好地控制扩展的行为,该遍历A​​PI可以从存储过程中使用。幸运的是,APOC Procedures在其路径扩展程序中已经为您完成了此操作,并且默认使用BFS。

使用此过程时,您将要确保关系类型和方向正确。

比方说,您的图仅具有从根到叶的传出关系。在这种情况下,这是用法示例:

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

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