【问题标题】:Cypher query shortest pathCypher 查询最短路径
【发布时间】:2013-02-15 10:53:50
【问题描述】:

我这样构建图:节点表示:busStops,关系表示连接bus stop的公交线路。

关系类型对应于从一个节点到另一个节点所需的时间。

当我查询图形(感谢 cypher)以获取可能未链接的两个之间的最短路径时,结果是使用的关系数量最少的那个。

我想改变它,以便最短路径对应于两个节点之间使用的所有关系类型(对应于时间)的添加最小的路径?

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    首先,你做错了。不要每次都使用唯一的关系类型。使用一种关系类型,然后在所有关系上放置一个属性“时间”。

    其次,要计算加法,您可以使用以下密码公式:

    START from=node({busStopId1}), to=node({busStopId2})
    MATCH p=from-[:LINE*]-to  //asterix * means any distance
    RETURN p,reduce(total = 0, r in relationships(p): total + r.time) as tt
    ORDER by tt asc;
    

    【讨论】:

    • 不,关系类型是 int,例如 2 或 3 分钟值。
    • 你必须改变它。只需只有一种关系类型,然后将这些分钟放入关系属性中。
    • 关系类型永远只是一个名字,不能是 int 也不能​​计算它的值
    • 目前无法在密码中从字符串转换为 int,因此很难将类型作为数字进行计算...... AFAIK(如 ulkas 所说)。不过,这不是在添加的可能性范围之外......
    • 好的,现在类型对应于交通工具的类型(自行车、步行、公共汽车或地铁)。如果我想要一个返回相同内容但不考虑类型的查询,我将 [:Line*] 替换为 [*] 对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多