我在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的Piccadilly线上的下一站),我找不到任何结果。节点'Bounds Green'节点存在,Wood Green和Bounds Green之间的关系也存在。
我无法想象这是对链中节点数量的限制。但是我在使用Neo4j时没有太多经验,而且我有点卡住了。
非常感谢任何见解,谢谢。
-ifor
答案 0 :(得分:2)
正如迈克尔所说,运行(a)-[*]-(b)
查询时,节点之间的关系似乎有15个限制。更改查询以使用(a)-[*..30]-(b)
解决了问题。
MATCH (from {name: "STATION_NAME_A" }), (to {name: "STATION_NAME_B" }),
p = shortestPath((from)-[*..30]-(to))
WITH REDUCE(time = 0, rel in rels(p) | time + rel.time) AS time, p
RETURN p, time
ORDER BY time ASC LIMIT 1