如何获取节点n跳范围内的相邻节点及逐段关系?
获取指定节点n跳范围内的所有相邻节点关系段
你需要提取指定节点n跳范围内所有相邻节点对及它们之间的直接关系,而非完整的长路径。可以通过拆分匹配到的路径来实现,具体Cypher查询如下:
MATCH path=(s:Type1 {id: "some_id"})-[*1..n]-(endNode) UNWIND range(0, length(relationships(path)) - 1) AS idx WITH nodes(path)[idx] AS fromNode, relationships(path)[idx] AS rel, nodes(path)[idx + 1] AS toNode RETURN DISTINCT fromNode, rel, toNode
逻辑说明:
- 匹配所有n跳内的路径:
MATCH path=(s:Type1 {id: "some_id"})-[*1..n]-(endNode)会获取从s出发、最多经过n条边的所有完整路径。 - 拆分路径为关系段:通过
UNWIND range(0, length(relationships(path)) - 1) AS idx遍历路径中每一条关系的索引,再通过nodes(path)[idx]和nodes(path)[idx+1]取出关系对应的首尾节点。 - 去重结果:使用
DISTINCT避免不同路径重复返回同一段相邻关系(比如多条路径经过同一对相邻节点时,去重后只保留一次)。
这个查询可以通用适配任意n值,只需替换查询中的n为你需要的最大跳数即可。
内容的提问来源于stack exchange,提问作者JollyRoger
相关产品推荐
相关产品推荐

