[英]arangodb query values in an index
我有一组棒球运动员,其结构如下:
{
"name": "john doe",
"education": [
"Community College",
"University"
]
}
如果我想获得教育数组中所有学校的列表,我可以执行以下操作:
FOR school IN unique((
FOR player IN players
COLLECT schools = player.education
RETURN schools
)[**])
FILTER school != null
FILTER LOWER(school) LIKE CONCAT('%', @name, '%')
LIMIT 10
RETURN school
但是为了做到这一点,它必须接触集合中的每个文档。 我在 player.education[*] 上建立了一个索引,其中包含所有学校。 有什么方法可以直接查询键(学校名称)的索引,而不必在每次需要运行查询时都触摸集合中的每条记录?
有两件事需要考虑:
FILTER school != null
语句需要一个非稀疏散列索引(稀疏索引忽略null
值)LOWER(school)
和LIKE
将始终触及每个文档 - 没有索引会有所帮助(它必须访问文档以获取值以使其成为小写等)请记住,大多数索引以两种方式之一工作(“全文”是异常值):
gt
/ lt
评估(“skiplist”)要完成您的任务,您需要在可以完全匹配(区分大小写)的字符串属性上创建索引。 如果您不能可靠地匹配属性值和搜索字符串之间的大小写,那么我建议要么转换文档中的值,要么创建该属性的小写副本并对其进行索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.