如何用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
相关产品推荐
相关产品推荐

