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

如何用Apache AGE查询维基百科图中两节点间的路径边数?

查询维基百科“到达哲学”图中节点路径边数的正确Cypher语句

问题背景

你构建了基于维基百科“到达哲学”现象的图:顶点标记为Article,边标记为RELATED_TO,代表文章正文首个链接的跳转关系。想要查询两个节点间的路径长度(即边的数量,比如从Tulpa到Philosophy),但之前的查询返回结果为1,这是因为你统计的是路径数量而非边数。

问题原因

你之前的查询用count(p)统计的是匹配到的路径总数,而不是单条路径中的边数。如果从Tulpa到Philosophy只有一条可达路径,count(p)就会返回1,这显然不是你需要的路径长度。

正确查询语句

场景1:获取最短路径的边数(符合“到达哲学”的常规跳转逻辑)

使用shortestPath()确保只返回最短路径,再用length(p)获取这条路径的边数:

SELECT * FROM cypher('Wikipedia', $$
    MATCH p = shortestPath((a:Article)-[:RELATED_TO*]->(b:Article))
    WHERE a.name = 'Tulpa' AND b.name = 'Philosophy'
    RETURN length(p) AS edge_count
$$) as (edge_count agtype);

场景2:获取所有可达路径的边数

如果需要查看所有可能路径的边数(若存在多条路径),可以直接匹配所有路径并返回每条路径的边数:

SELECT * FROM cypher('Wikipedia', $$
    MATCH p =(a:Article)-[:RELATED_TO*]->(b:Article)
    WHERE a.name = 'Tulpa' AND b.name = 'Philosophy'
    RETURN length(p) AS edge_count, p AS path_details
$$) as (edge_count agtype, path_details agtype);

关键说明

  • length(p):Cypher中的length()函数专门用于返回路径中包含的边的数量,这正是你需要的“路径长度”定义。
  • shortestPath():由于“到达哲学”现象中通常是通过点击首个链接的最短路径到达,使用该函数可以精准获取符合场景的路径,避免返回冗余的长路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:33:10