arangodb запрашивает значения в индексе

#indexing #nosql #arangodb

#индексирование #nosql #arangodb

Вопрос:

У меня есть коллекция игроков в бейсбол, которая структурирована примерно следующим образом:

 {
    "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[*], в котором были бы все школы. Есть ли какой-либо способ, которым я мог бы напрямую запрашивать индекс для ключей (названий школ) вместо того, чтобы касаться каждой записи в коллекции каждый раз, когда мне нужно выполнить запрос?

Ответ №1:

Следует учитывать две вещи:

  1. Для FILTER school != null инструкции требуется не разреженный хэш-индекс (при разреженной индексации исключаются null значения)
  2. Использование LOWER(school) и LIKE всегда будет касаться каждого документа — никакой индекс не поможет (он должен получить доступ к документу, чтобы получить значение, чтобы сделать его строчным и т. Д.)

Имейте в виду, что большинство индексов работают одним из двух способов («полнотекстовый» является выбросом):

  1. Точное совпадение («хэш»)
  2. числовые gt / lt вычислительные («список пропусков»)

Чтобы выполнить то, что вам нужно, вам нужно создать индекс для строкового свойства, которое вы можете точно сопоставить (с учетом регистра). Если вы не можете надежно сопоставить регистр между значением вашего атрибута и строкой поиска, я бы рекомендовал либо преобразовать значение в документе, либо создать копию этого атрибута в нижнем регистре и проиндексировать его.

Вот документы ArangoDB, касающиеся типов индексов. В руководстве есть раздел, посвященный основам и использованию индекса, но мне больше нравятся HTTP docs.