我有一个从节点和关系“(n1:Place)-[r:COST]->(n2:Place)”投影的图表。 为了找到名称为“a”和“z”的两个节点之间最便宜的路径,我使用 Dijkstra 的最短路径算法:
MATCH (start:Place) where 'a' = start.name
MATCH (end:Place) where 'z' = end.name
CALL gds.shortestPath.dijkstra.stream('my-graph',{
sourceNode: id(start),
targetNode: id(end),
relationshipWeightProperty: 'cost'
})
YIELD nodeIds
它工作得很好,但我读到 id(node):int 已被弃用,在 Neo4j 1.5.8 中我应该使用新的 elementId(node):string 函数。
MATCH (start:Place) where 'a' = start.name
MATCH (end:Place) where 'z' = end.name
CALL gds.shortestPath.dijkstra.stream('my-graph',{
sourceNode: elementId(start),
targetNode: elementId(end),
relationshipWeightProperty: 'cost'
})
YIELD nodeIds
但是,由于 elementId() 返回字符串而不是 int,因此会引发异常:
Failed to invoke procedure `gds.shortestPath.dijkstra.stream`: Caused by: java.lang.IllegalArgumentException: Expected a node or a node id for `sourceNode`. Got String.
还有其他选项支持使用 elementId() 而不是 id() 进行寻路吗?
GDS 目前不支持
elementId()
值,因此您必须使用 id()
。
elementID 是一个字符串,但您可以获取 id,如下所示:
match (n) return toInteger(split(elementId(n),':')[2])