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

时间:2017-06-03 17:52:56

标签: neo4j cypher relationship cql

我的所有节点都是'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选择最佳路径?

根据这一点,我该怎么办?什么是查询?

1 个答案:

答案 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 Proceduresimplementation你可以使用。