在Memgraph中运行Dijkstra算法报错:WSHORTEST函数不存在
解决Memgraph中加权最短路径查询的语法错误
你遇到的问题是使用了Memgraph不支持的语法,WSHORTEST并非合法的函数或路径量词格式。要基于节点Euro属性、仅通过:MarriedTo关系查找加权最短路径,可采用以下两种正确写法:
写法1:使用weightedShortestPath()内置函数
MATCH path = weightedShortestPath( (n {id: 0})-[:MarriedTo*]-(m {id: 9}), node(node) | node.Euro ) UNWIND nodes(path) AS node RETURN node.id;
- 第一个参数限定路径模式:仅通过
:MarriedTo关系连接起始节点(id:0)和目标节点(id:9) - 第二个参数定义权重规则:
node(node) | node.Euro表示将路径中每个节点的Euro属性作为加权计算依据
写法2:使用*WSHORTEST路径量词
MATCH path = (n {id: 0})-[:MarriedTo *WSHORTEST (weight: node(n).Euro)]-(m {id: 9}) UNWIND nodes(path) AS node RETURN node.id;
*WSHORTEST (weight: node(n).Euro)明确指定查找加权最短路径,权重取自路径节点的Euro属性- 若需要返回多条加权最短路径,可在
*WSHORTEST后添加数字(如*WSHORTEST 3返回前3条)
额外提示
如果你的加权逻辑是基于关系属性而非节点属性,只需将权重表达式改为rel(rel).<目标属性名>即可;同时请确保起始节点id:0和目标节点id:9存在且通过:MarriedTo关系可达。
内容的提问来源于stack exchange,提问作者MPesi
相关产品推荐
相关产品推荐

