如何在arangodb图搜索中使用索引?

时间:2015-10-17 16:10:24

标签: graph-databases arangodb aql document-database nosql

我正在为我的申请评估ArangoDb。 我有一个像文件系统这样的数据模型,包含Items文档集合和ItemsParents边集合,其中包含有关Items的父子关系。

现在我想找到具有特定属性

的特定项目的所有子项

Ex:A的所有子项,属性为Properties.Age.Value = 20

所以我在Items.Properties.Age.Value上创建了一个哈希索引,并设计了这个AQL查询:

FOR item 
    IN GRAPH_NEIGHBORS('ItemsGraph', 'Items/A', 
       { direction : 'outbound', 
         includeData: true,
         neighborExamples : { 'Properties.Age.Value': 20 }
       })
RETURN { Id: item._key, Name: item.Name } 

上面的查询运行良好,但没有使用索引,因此它会对Items集合执行完整扫描以测试Properties.Age.Value过滤器。

如何设计查询以便使用索引有效地执行并避免集合扫描?

由于

1 个答案:

答案 0 :(得分:3)

目前ArangoDB只能在图形操作中使用边缘索引;

不使用 GRAPH_NEIGHBOURS 可能会提供索引,但您必须自己过滤邻居。

提供这种索引支持的顶点中心索引可能会在接下来的两个ArangoDB版本之一中获得。

[编辑] 与此同时,新的ArangoDB版本可以实现这一点。

GRAPH_NEIGHBOURS 已集成到the traversal engine中。您现在可以在Age_from上创建组合索引。您应该使用db._explain()来检查索引的使用情况。