【问题标题】:Is it possible to find all paths between minimum and maximum cost in neo4j?是否可以在 neo4j 中找到最小和最大成本之间的所有路径?
【发布时间】:2015-10-23 11:11:02
【问题描述】:

我有一个包含大约 1000 万个节点的 neo4j 数据库。它们通过与属性“weight”的关系连接。我想根据最小和最大成本(通过“weight”属性)找到起始节点和目标节点之间的路径。我正在使用 Java,所以我探索了 GraphAlgoFactory 和 Dijkstra 类。 Dijkstra 只会给我多条路径,但成本最低。但我想要多条路径,其成本高于最短路径的成本。

假设A 和B 两个节点之间有多个路径。最小路径成本为20(4 个节点)。但我想要所有成本为25 到30 的路径。有可能吗?

任何帮助将不胜感激......

【问题讨论】:

    标签: neo4j dijkstra


    【解决方案1】:

    不确定 Java,但您可以从 Cypher 中的路径聚合数据。

    您首先 MATCH 具有 [*1..n] 关系的开始和结束节点,然后是 RETURN 所有路径以及此路径中关系的聚合(即减少)权重。

    沿着这条线:

    MATCH path = (a:Node {some: 'property'})-[*1..10]-(b:Node {some: 'property'})
    RETURN path, reduce(sum = 0, r IN relationships(path) | sum + r.weight) AS weight_sum
    

    http://neo4j.com/docs/stable/query-functions-collection.html#functions-reduce

    【讨论】:

    • 我尝试过这种方法,但如果总共有数千条路径,它就太慢了。我只想要比路径总数少得多的特定权重的路径。我不确定是否有办法在遍历不符合最终结果条件的路径时快速消除路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多