根据关系 属性 在 neo4j 上选择路径?

Choose a path depending on relationship property on neo4j?

我所有的节点都是'Places',只有'name'属性,我有不同的关系,名为A、B和C,每个节点都有一个'cost' 属性.

如果我在第一个节点,连接到第二个节点,我想'take'成本较低的关系。

例如:

MATCH (p1:Place{name: place1}) 
MATCH (p2:Place{name: place2}) 

MERGE (place1)-[:A{cost: "10"}]->(place2)
MERGE (place1)-[:B{cost: "5"}]->(place2)
MERGE (place1)-[:C{cost: "20"}]->(place2)

我想做的是(在这种情况下)关系 B

关系的成本对于每个名称而言始终相同(A 始终成本 10,B 始终成本 5)因此可能没有必要将成本 属性 添加到其中).

最好的解决方案是通过查询或列出路径来完成,select最好的解决方案是 java?

据此,我该怎么做?查询是什么?

有几种方法可以做到这一点。

对于很少的节点和很少的关系,按成本对关系进行排序并抓住第一个应该很容易:

...
MATCH path=(:Place{name: place1})-[r]-(:Place{name: place2})
WITH path, r
ORDER BY r.cost ASC
LIMIT 1
RETURN path

如果这是针对更复杂的操作,例如计算节点之间的最小成本路径,那么这将变成加权最短路径查询,您可能需要使用 Dijkstra 算法查看解决方案。 APOC Procedures has an implementation你可能会用到。