ArangoDB:如何获得2个顶点之间的所有可能路径?

时间:2015-04-16 14:01:47

标签: arangodb aql

如何在maxDepth = 2的情况下获得2个顶点(例如X和Y)之间的所有可能路径?

我尝试使用TRAVERSAL,但执行时间约为10秒。这是查询:

FOR p IN TRAVERSAL(locations, connections, "X", "outbound", { minDepth: 1, maxDepth: 2, paths: true }) 
FILTER p.destination._key == "Y" 
RETURN p.path.vertices[*].name

位置(顶点)集合有23753个文档,连接(边缘)集合有123414个文档。

1 个答案:

答案 0 :(得分:2)

如果您通过选项filterVertices将目标权限过滤器放入遍历中,您可以大大加快查询速度,以提供遍历应触及的顶点示例。使用vertexFilterMethod,您可以定义与示例不匹配的所有顶点应该发生的情况。

因此,在您的查询中,您只想匹配目标顶点“Y”,并且所有其他顶点都应该通过但不包含在结果exclude中。

这使后来的FILTER过时了。 现在,内部优化器无法自动完成,但这种魔力在我们的路线图上。

这是一个包含优化的查询:

FOR p IN TRAVERSAL(locations, connections, "X", "outbound", { minDepth: 1, maxDepth: 2, paths: true, filterVertices: [{_key: "Y"}], vertexFilterMethod: ["exclude"]})
RETURN p.path.vertices[*].name