用于排序的顶点中心索引

时间:2017-12-18 08:47:21

标签: graph-databases arangodb

假设我有多个边缘的超级节点,并希望快速返回给定节点的前N个边缘。如何使用arangodb Vertex Centric Index https://docs.arangodb.com/3.1/Manual/Indexing/VertexCentric.html进行操作?

我可以创建跳转列表顶点中心索引

arangosh> db.collection.ensureIndex({ type: "skiplist", fields: [ "_from", "points" ] })

但是优化器不会使用排序查询

来提取它
FOR edge IN collection
  FILTER edge._from == "vertices/123456" 
  SORT edge.points DESC
  LIMIT 0, 10
  RETURN edge

似乎arango优化器不会在遍历语法中选择跳转列表Vertex Centric Index,但文档说它应该:

FOR v, e, p IN 3..5 OUTBOUND @start GRAPH @graphName
  FILTER p.edges[*].points ALL >0
  RETURN v

1 个答案:

答案 0 :(得分:0)

  

快速返回给定节点的前N个边缘

最好从节点开始:

FOR v, e IN 1..1 ANY @start @edges
  SORT e.points DESC
  LIMIT 10
  RETURN e

这应该与ArangoDB的当前版本(3.3)一样好,假设你让ArangoDB索引_from - 我怀疑为.points添加一个跳转列表会是什么(有益的)差异,除非您在FILTER中使用它。

(我相信使用跳过列表索引_from在这里是不明智的。如果edges是一个边缘集合,它已经被正确编入索引。)