Как сместить предел по отсортированному индексу с AQL? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть коллекция документов member с двумя соответствующими свойствами: _key и score. Я также создал индекс persistent для поля score, поскольку это должно значительно ускорить сортировку. Я хочу написать AQL-запрос, который возвращает разные результаты на основе отсортированного индекса указанного c члена (обозначается как A):

  • Всегда возвращает как минимум 5 лучших членов на score. (LIMIT 5)
  • Если A входит в первую десятку, верните 6–10 ранжированных членов. (LIMIT 5, 5)
  • В противном случае верните членов непосредственно выше и ниже А по рангу. (LIMIT x - 1, 3, х = ранг А)

1 Ответ

0 голосов
/ 27 февраля 2020

Мне не удалось сделать это в одном запросе, однако я смог получить ранг члена, выполнив что-то вроде

RETURN LENGTH(
  FOR m IN members
    FILTER m.score > DOCUMENT("members", "ID").score
    RETURN 1
) + 1

, а затем использовать второй запрос для извлечения ранжированные данные, которые я хотел, что-то вроде

  FOR m IN members
    SORT m.score DESC LIMIT 10
    RETURN m

или объединение двух подзапросов с LIMIT 5 и LIMIT rank - 2, 3 в зависимости от ранга.

...