【发布时间】:2015-03-18 04:30:00
【问题描述】:
我在 Neo4j 中创建了一张伦敦地铁的地图。站点通过 :CONNECTED_TO 关系连接,时间值表示站点之间需要多长时间(目前这些是我为测试而输入的随机值)。位于多条线路上的站点对每条线路都有一个节点,通过 :PART_OF 关系连接。使用这个查询:
MATCH (from {name:"Wood Green"}), (to {name:"Royal Oak"}),
p = shortestPath((from)-[*]-(to))
WITH REDUCE(time = 0, rel in rels(p) | time + rel.time) AS time, p
RETURN p, time
ORDER BY time ASC LIMIT 1
我能够得到下面的最短路径:
这条路线在 4 条不同的线路上,并且设法毫无问题地找到路线。
如果我将查询更改为从 Royal Oak 到 Bounds Green(皮卡迪利线上从 Wood Green 出发的下一站),我找不到任何结果。节点“Bounds Green”节点与 Wood Green 和 Bounds Green 之间的关系一样存在。
我无法想象这是对链中节点数量的限制。但是我在使用 Neo4j 方面没有太多经验,我有点卡住了。
非常感谢任何见解,谢谢。
-ifor
【问题讨论】:
-
漂亮。您能否提供更改后的查询以及您的数据库(不应该那么大)。链中限制为 15,但您可以使用
(a)-[*..30]->(b)增加它 -
太棒了,谢谢迈克尔。我假设
[*]会给出一个无限链。更改为[*..30]解决了这些问题。再次感谢。