我想在我的图表(Neo4j 3.0.4)中查找从A点到Z点的前5(最短)路径。 该图由几个节点组成,这些节点通过关系“CONNECTED_BY”连接。此连接具有应最小化的成本属性。
我从这开始:
MATCH p=(from:Stop{stopId:'A'}), (to:Stop{stopUri:'Z'}),
path = allShortestPaths((from)-[:CONNECTED_TO*]->(to))
WITH REDUCE (total = 0, r in relationships(p) | total + r.cost) as tt, path
RETURN path, tt
此查询始终返回跳数最少的子图,不考虑cost属性。存在具有更多跳跃的另一子图,其具有更低的总成本。我做错了什么?
此外,我实际上想获得TOP 5子图。如果我执行此查询:
MATCH p=(from:Stop{stopUri:'A'})-[r:CONNECTED_TO*10]->(to:Stop{stopUri:'Z'}) RETURN p
我可以看到几条路径,但第一条只返回一条路径。 当然,路径不应包含循环等。
我想通过REST API执行此查询,因此REST调用或cyhper查询应该执行此操作。
EDIT1: 我想将其作为REST调用执行,所以我尝试了dijkstra算法。这似乎是一个好方法,但我必须通过在关系中添加3个不同的成本属性来计算权重。如何实现这一目标?