Indexing 索引中的arangodb查询值

Indexing 索引中的arangodb查询值,indexing,nosql,arangodb,Indexing,Nosql,Arangodb,我收集了一批棒球运动员,其结构如下: { "name": "john doe", "education": [ "Community College", "University" ] } FOR school IN unique(( FOR player IN players COLLECT schools = playe

我收集了一批棒球运动员,其结构如下:

{
    "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
如果我想获得教育阵列中所有学校的列表,我可以执行以下操作:

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

但为了做到这一点,它必须接触收藏中的每一份文件。我建立了一个关于球员的索引。教育[*],它将包含所有的学校。是否有任何方法可以直接查询索引中的键(学校名称),而不必在每次需要运行查询时触摸集合中的每个记录?

有两件事需要考虑:

  • 过滤学校!=null
    语句需要非稀疏散列索引(稀疏索引省略了
    null
    值)
  • 使用
    LOWER(school)
    和像
    这样的
    始终触摸每个文档-没有索引会有帮助(它必须访问文档才能获得值,使其小写,等等)
  • 请记住,大多数索引以两种方式之一工作(“全文”是异常值):

  • 精确匹配(“哈希”)
  • 数值
    gt
    /
    lt
    评估(“skiplist”)
  • 为了完成您所追求的目标,您需要在字符串属性上创建一个可以精确匹配的索引(区分大小写)。如果您不能可靠地匹配属性值和搜索字符串之间的大小写,那么我建议您要么转换文档中的值,要么创建该属性的小写副本并对其编制索引

    以下是关于索引类型的ArangoDB。有一个关于索引基础和用法的部分,但是我更喜欢HTTP文档