Neo4j技术求助:如何补全代码实现所有Genre节点间最短路径查询
Neo4j 所有流派节点间最短路径查询实现
补全后的完整代码
match (g:Genre) with g.genre as genre1 match (g1:Genre {genre: genre1}) match path = allShortestPaths((g1)-[*]-(g2:Genre)) where g1 <> g2 return distinct genre1, g2.genre as genre2, length(path)/2 as length order by length desc, genre1, genre2;
代码解释
- 第一步
match (g:Genre)遍历所有流派节点,通过with提取流派名称genre1,确保每个流派仅被处理一次 - 第一个新增
match:match (g1:Genre {genre: genre1}),根据流派名称找回对应的节点(前面的with仅传递了字符串,需要重新绑定节点对象才能执行路径查询) - 第二个新增
match:match path = allShortestPaths((g1)-[*]-(g2:Genre)),查询当前流派节点g1到所有其他流派节点g2的最短路径,无向关系-[*]-适配流派通过电影关联的双向结构 where g1 <> g2过滤掉流派到自身的无效路径length(path)/2是因为流派间的路径为Genre-Movie-Genre的链式结构,路径长度(关系数量)除以2才是两个流派之间的实际关联层数
关键说明
必须添加match语句,原因如下:
- 前面的
with仅传递了流派名称字符串,需要重新匹配回节点对象才能执行路径查询 - 需通过第二个
match调用allShortestPaths,遍历当前流派到其他所有流派的路径
内容的提问来源于stack exchange,提问作者fltray10
相关产品推荐
相关产品推荐

