我正在为我的申请评估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过滤器。
如何设计查询以便使用索引有效地执行并避免集合扫描?
由于
答案 0 :(得分:3)
目前ArangoDB只能在图形操作中使用边缘索引;
不使用 GRAPH_NEIGHBOURS 可能会提供索引,但您必须自己过滤邻居。
提供这种索引支持的顶点中心索引可能会在接下来的两个ArangoDB版本之一中获得。
[编辑] 与此同时,新的ArangoDB版本可以实现这一点。
GRAPH_NEIGHBOURS 已集成到the traversal engine中。您现在可以在Age
和_from
上创建组合索引。您应该使用db._explain()
来检查索引的使用情况。