我的所有节点都是'Places',只有'name'属性,我有不同的关系,名为A,B和C,每个都有一个'cost'属性。
如果我在第一个节点,连接到第二个节点,我想以较低的成本'采取'这种关系。
例如:
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)所以也许没有必要将成本属性放到它上面。
最好的解决方案是使用查询或列出路径并使用java选择最佳路径?
根据这一点,我该怎么办?什么是查询?
答案 0 :(得分:0)
有几种方法可以做到这一点。
对于少数节点和很少的关系,按成本排序关系应该很容易并抓住第一个:
...
MATCH path=(:Place{name: place1})-[r]-(:Place{name: place2})
WITH path, r
ORDER BY r.cost ASC
LIMIT 1
RETURN path
如果这是一个更复杂的操作,例如计算节点之间成本最低的路径,那么这将变成加权最短路径查询,您可能希望使用Dijkstra算法查看解决方案。 APOC Procedures有implementation你可以使用。