Neo4j-如何按距离对路径之间的所有节点进行分组

时间:2018-11-07 14:46:45

标签: neo4j nosql

让我们假设在两个给定节点之间存在等距离的2条最短路径。我要按距离将所有节点分组。

示例图中有两条最短路径:
1)A - B - C - D - E
2)A - B - J - K - E

我期望的最终结果是:

B - 1  
C,J - 2  
D, K - 3  
E - 4  

一种方法是找到所有节点,然后循环查找长度,但这既不高效也不绝对正确。

请参考任何文档并参考您的答案,因为我找不到它。

1 个答案:

答案 0 :(得分:2)

这是基于电影数据集的示例:

MATCH p=allshortestPaths( (bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"}))
WITH nodes(p) AS path
UNWIND range(0, size(path)-1, 1) AS index
    WITH index, path[index] AS node
    RETURN index, collect(DISTINCT node)
    ORDER BY index ASC

找到路径后,我将对其进行遍历以创建index & node的集合。然后,您只需根据索引(RETURN index, collect(DISTINCT node))进行汇总