You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Memgraph/Cypher中获取图的唯一路径并统计热门路径?

解决方案

针对直接关系(单步路径)的场景

如果你的路径都是单步直接关系(像示例里的A→B、A→C),可以通过按起点和终点节点分组,统计关系数量(即热度)来实现需求:

MATCH (start:Fen)-[r]->(end:Fen)
WHERE start.Name = 'A'
// 按起点、终点分组,统计关系数作为热度
WITH start, end, COUNT(r) AS hotness
// 按热度降序排序
ORDER BY hotness DESC
// 返回合并后的路径表示和热度
RETURN start.Name + ' -r-> ' + end.Name AS path, hotness

执行后会得到:

pathhotness
A -r-> B2
A -r-> C1

针对多步路径的场景

如果需要处理任意长度的多步路径(对应你原查询里的[r*]),可以通过提取路径上的节点序列来分组,统计相同节点序列的路径数量:

MATCH path = (start:Fen)-[r*]->(end:Fen)
WHERE start.Name = 'A'
// 提取路径上的所有节点,按节点序列分组统计热度
WITH nodes(path) AS pathNodes, COUNT(path) AS hotness
// 将节点列表转换为名称数组
WITH [node IN pathNodes | node.Name] AS nodeNames, hotness
// 拼接成路径字符串
WITH REDUCE(result = nodeNames[0], idx IN RANGE(1, SIZE(nodeNames)-1) | result + ' -r-> ' + nodeNames[idx]) AS path, hotness
// 按热度降序,返回去重后的路径
ORDER BY hotness DESC
RETURN DISTINCT path, hotness

原查询问题说明

你之前用RETURN DISTINCT(path)无法去重,是因为Cypher中每条路径的关系实例(r1、r2)是不同的,即使起点终点相同,也会被判定为不同路径。必须通过节点序列分组统计的方式,才能合并相同起点终点(或相同节点序列)的路径。

内容的提问来源于stack exchange,提问作者user1099123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:05:08