Консультации по дизайну запросов ElasticSearch - PullRequest
0 голосов
/ 11 января 2019

У меня есть документы ES, которые выглядят так:

{
   "auctionOn": "2018-01-01",
   "inspections: [
    {
       "startsOn": "2018-01-02 09:00",
       "endsOn": "2018-01-02 10:00"
    }
    ]
}

Мне нужны следующие ответы из поиска (или нескольких поисков)

  1. количество документов с auctionOn в будущем (например, сейчас)
  2. количество документов с inspection.startsOn в будущем (например, сейчас)
  3. гистограмма даты (с разбивкой по дням) следующих 7 дней, с количеством документов с auctionOn в этот день
  4. гистограмма даты (с разбивкой по дням) следующих 7 дней, с количеством документов с inspection.startsOn в этот день

Итак, я пытаюсь выяснить, как эффективно получить эти ответы. Я знаю, что могу / должен протестировать все разные подходы, но я относительно новичок в ES, так что легче сказать, чем сделать.

Может ли кто-нибудь дать мне совет (или, в идеале, запрос), как получить эти 4 значения?

Идеи, которые у меня были:

  1. Запрос всех документов с инспекцией / аукционом в будущем. Создайте агрегаты гистограмм дат, отфильтрованные по следующим 7 дням для аукциона и проверок. Используйте диапазон агрегации, чтобы получить количество документов с аукциона / проверки> сегодня. Плюсы: один поиск для всех ответов. Минусы: много документов для агрегирования?

  2. Создание отдельных поисков (например, msearch) для:

    • запросить все документы с проверкой в ​​ближайшие 7 дней. агрегировать по дням.
    • запросить все документы с аукциона в ближайшие 7 дней. агрегировать по дням.
    • запросить все документы с проверкой в ​​будущем. используйте хиты, чтобы получить всего
    • запросить все документы с аукциона в будущем. использовать хиты, чтобы получить общее количество. Плюсы: запросы проще .. больше попаданий в кеш? Минусы: 4 отдельных поиска.

Может кто-нибудь подсказать мне правильный путь и дать подсказки о том, как выполнить запрос / агрегирование?

Спасибо

1 Ответ

0 голосов
/ 11 января 2019
  1. Используйте диапазон запрос в поле auctionOn с текущей датой и с до с нулевой датой.
  2. Используйте диапазон запрос внутри вложенного запроса в поле inspe.startsOn , как указано выше.
  3. Использовать гистограмму даты агрегирование с использованием интервал как день
  4. То же, что и 3.), но внутри вложено агрегирование
  5. Вы можете настроить все это в одном запросе.
...