arangoDB中的多路径搜索

时间:2017-10-27 16:09:02

标签: arangodb

是否有可能在ArangoDB中找到许多最短路径变体? 我需要找到很多变种,比如 第一条路径 - 距离2 第二路径距离3 等

OOB是否包括algrorithm? 我想指定在搜索结果中必须找到的节点。

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

提前致谢。

1 个答案:

答案 0 :(得分: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)进行模式匹配,因为最小和最大深度不能是表达式(它们必须在提前,所以要么是数字文字或绑定参数)。