首页 文章

arangoDB中的多路径搜索

提问于
浏览
1

有没有可能在ArangoDB中找到许多最短路径的变体?我需要找到许多变体,比如First Path - 距离2秒距离3等 .

有OOB包含算法吗?我想指定在搜索结果中必须找到的节点 .

是否支持矢量权重?我的意思是权重的特征是一个数组,其中权重按优先顺序排列 .

提前致谢 .

1 回答

  • 1

    最短路径算法只能确定一条最短路径 .
    例如,如果这是完整图表:

    example graph

    ...然后从 AC 的最短路径查询可能会返回路径 A -> B -> CA -> D -> C ,但它未定义哪一个(此处不考虑边缘权重) .

    但是,您可以使用有效的最短路径算法来确定最短路径长度:

    RETURN LENGTH(
      FOR v IN OUTBOUND
        SHORTEST_PATH "verts/A" TO "verts/C" edges
        RETURN v
    )
    

    示例图的结果为3(包括起始顶点) . 现在,减去1以获得边数/遍历深度 . 您可以运行匹配遍历的模式以查找具有此长度的所有路径(或通过增加最小和最大深度来查找更长的路径) . 起点再次为 A ,文档ID为 v (或 p.vertices[-1] )的过滤器确保我们只检索以 C 结尾的路径:

    FOR v, e, p IN 2..2 OUTBOUND "verts/A" edges
      FILTER v._id == "verts/C"
      RETURN CONCAT_SEPARATOR(" -> ", p.vertices[*]._key)
    
    [
      "A -> B -> C",
      "A -> D -> C"
    ]
    

    遍历深度 3..3 将返回 A -> E -> F -> C2..3 所有三个路径 .

    请注意,需要两个单独的查询来计算最短路径长度并根据最短路径长度(减1)进行模式匹配,因为最小和最大深度不能是表达式(它们必须事先知道,所以要么是数字文字,要么是绑定参数) .

相关问题