neo4j最短的连接器节点和多个选项

时间:2015-06-19 19:25:37

标签: neo4j cypher dijkstra

我的数据库中有城市,道路和运输工具。 道路通过From和To关系连接到两个(不同的)城市。每条道路也有一个物业距离(以公里为单位)。 多个运输商可能与道路有关系。每个运输商都有一个价格(每公里)。

现在我的问题。我想要最便宜的选择从A市到B市的包裹。可能有直接的道路,否则我们必须经过其他城市和运输车。我想明确地使用Dijkstra算法。

这个查询可以在Cypher中完成吗?如果没有,如何使用Neo4J Java API完成?

1 个答案:

答案 0 :(得分:1)

基于你的sample dataset,我认为存在一个模型化问题,可能会使事情变得困难,当然也可以用于定向关系。

但是,您已经可以找到成本最低的路径:

MATCH (a:City { name:'CityA' }),(d:City { name:'CityD' })
MATCH p=(a)-[*]-(d)
WITH p, filter(x IN nodes(p) 
               WHERE 'Road' IN labels(x)) AS roads
WITH p, reduce(dist = 0, x IN roads | dist + x.distance) AS totalDistance
RETURN p, totalDistance
ORDER BY totalDistance
LIMIT 5