Раздел 40 · Elasticsearch и ELK

Агрегации: аналитика поверх поиска

junior~10 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Посмотри на экран поиска любого интернет-магазина. Слева список фильтров, и рядом с каждым число: «Итальянская (225)», «Японская (200)», «до 400 ₽ (312)». Эти числа считаются по тем же найденным товарам, что справа в списке, и меняются вместе с запросом. Их называют фасетами, и в Elasticsearch их считают агрегациями.

Агрегации

Агрегация это сводка по найденным документам. Её пишут в том же запросе _search, что и поиск, в разделе aggs. Elasticsearch сначала находит документы по query, а потом считает по ним сводку. Это похоже на GROUP BY в SQL, только сразу поверх поиска.

Агрегации бывают двух видов.

Корзины делят документы на группы:

  • terms: по значениям поля keyword. Кухни, теги, рестораны;
  • range: по диапазонам чисел. «До 400», «400-600», «от 600»;
  • histogram и date_histogram: по ровным интервалам числа или времени. Заказы по дням, об этом в части про логи.

Метрики считают число по документам:

  • avg, sum, min, max, stats (всё сразу);
  • cardinality: сколько разных значений, например сколько ресторанов;
  • percentiles: перцентили, например 95-й перцентиль времени ответа.

Корзины можно вкладывать: внутри каждой кухни посчитать среднюю цену. Получится вложенная агрегация.

Одна тонкость terms

У terms есть size: сколько корзин вернуть, по умолчанию 10, самые крупные первыми. Остальные документы не теряются: их число в поле sum_other_doc_count. А doc_count_error_upper_bound показывает, насколько счёт может ошибаться, когда индекс разбит на много шардов: каждый шард присылает свой топ, и редкое значение могло не войти в топ какого-то шарда. На одном шарде ошибки нет.

урок из курса

Урок из курса «Elasticsearch и ELK». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.