В нашем эластичном поиске хранятся заказные документы. В каждом документе есть поле, позволяющее указать номер телефона.
мы хотим узнать количество телефонных номеров (сколько раз заказ был получен с номера телефона).
Каждый (я повторяю каждый) номер телефона сделал 10 миллионов + заказов по всем нашим данным. Таким образом, агрегирование по всем данным занимает слишком много времени. мы пришли к выводу, что ограничение должно быть установлено, потому что данных слишком много. мы добавили в запрос terminate_after и время отклика улучшилось до желаемого предела, но затем появилась новая проблема. Если мы собираемся установить ограничение, мы хотим ограничить результаты самых последних 2000 документов вместо любых 2000 документов.
Итак, в двух словах, мы хотим узнать количество заказов по номеру телефона в последних 2000 документах.
Как этого добиться вasticsearch.
то, что мы пробовали до сих пор:
- сортировка сегментов (применяется только после того, как сегменты уже созданы)
- свойство terminate_after в запросе (это не учитывает то, что мы хотим считать в последних 2000 совпадениях)
- Агрегатор TopNhits (также работает после подсчета хитов)