arangodb查询索引中的值

dldeef67  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(201)

我有一个棒球运动员的集合,其结构类似于以下内容:

{
    "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

但是为了做到这一点,它必须接触集合中的每一个文档。我在players.education[*]上建立了一个索引,其中包含了所有的学校。有没有什么方法可以直接查询索引中的键(学校名称),而不是每次需要运行查询时都必须接触集合中的每一个记录?

ebdffaop

ebdffaop1#

有两件事需要考虑:

  1. FILTER school != null语句需要非稀疏散列索引(稀疏索引会遗漏null值)
    1.使用LOWER(school)LIKE将***总是***触及每个文档-没有索引会有帮助(它必须访问文档以获取值,使其变为小写,等等)
    请记住,大多数索引都以两种方式之一工作(“全文”是异常值):
    1.完全匹配(“哈希”)
    1.数值gt/lt评估(“跳过列表”)
    为了实现您的目标,您需要在字符串属性上创建一个索引,以便您可以精确匹配(区分大小写)。如果您不能可靠地匹配属性值和搜索字符串之间的大小写,那么我建议您要么转换文档中的值,要么创建该属性的小写副本并对其进行索引。
    下面是关于索引类型的ArangoDB docsmanual有一个关于索引基础知识和用法的部分,但我更喜欢HTTP文档。

相关问题