繁体   English   中英

索引中的 arangodb 查询值

[英]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[*] 上建立了一个索引,其中包含所有学校。 有什么方法可以直接查询键(学校名称)的索引,而不必在每次需要运行查询时都触摸集合中的每条记录?

有两件事需要考虑:

  1. FILTER school != null语句需要一个非稀疏散列索引(稀疏索引忽略null值)
  2. 使用LOWER(school)LIKE始终触及每个文档 - 没有索引会有所帮助(它必须访问文档以获取值以使其成为小写等)

请记住,大多数索引以两种方式之一工作(“全文”是异常值):

  1. 完全匹配(“哈希”)
  2. 数值gt / lt评估(“skiplist”)

要完成您的任务,您需要在可以完全匹配(区分大小写)的字符串属性上创建索引。 如果您不能可靠地匹配属性值和搜索字符串之间的大小写,那么我建议要么转换文档中的值,要么创建该属性的小写副本并对其进行索引。

以下是有关索引类型的 ArangoDB文档 手册有一节介绍了索引基础知识和用法,但我更喜欢 HTTP 文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM