【问题标题】:Neo4j Graph DB - London Subway Planner - Path not foundNeo4j Graph DB - 伦敦地铁规划师 - 未找到路径
【发布时间】: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] 解决了这些问题。再次感谢。

标签: graph path neo4j


【解决方案1】:

正如 Michael 所提到的,在运行 (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

【讨论】:

    猜你喜欢
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2015-07-21
    • 2012-06-02
    • 2022-01-13
    相关资源
    最近更新 更多