Metric aggregations
Тема дорожной карты · Elasticsearch
Метрические агрегации в Elasticsearch вычисляют числовую статистику по значениям числового поля в документах индекса или внутри документов бакетной агрегации. Наиболее часто используемые метрические агрегации: avg (среднее арифметическое), sum (сумма), min, max, value_count (количество ненулевых значений) и stats (составная агрегация, возвращающая всё перечисленное в одном запросе). Более продвинутые метрические агрегации в Elasticsearch включают cardinality (приближённый подсчёт уникальных значений с помощью HyperLogLog), percentiles (например, 95-й и 99-й перцентили времени ответа), extended_stats (дисперсия и стандартное отклонение) и top_hits (возвращает лучшие совпадающие документы внутри бакета). Метрические агрегации, как правило, вкладываются внутрь бакетных агрегаций для вычисления статистики по каждой группе — например, среднего значения заказа по категориям продуктов с помощью бакетной агрегации terms и метрической агрегации avg внутри. Поскольку метрические агрегации оперируют doc_values — колонко-ориентированными структурами на диске, — Elasticsearch может вычислять их эффективно даже на больших индексах, не загружая полный _source в память.
Как это работает
Metric aggregations: суммируйте + группируйте документы во время query. Bucket aggregations группируют docs (terms = group by field, date_histogram = group by time, range = группы по диапазонам). Metric aggregations считают статы (sum, avg, min/max, percentiles, cardinality). Pipeline aggregations считают над другими aggregations (cumulative sums, moving averages, derivatives). Aggregations — основа Kibana dashboards + log аналитики, но дороги на high-cardinality полях.
Когда применять
Всегда aggregations с filtered query — aggregations по всему индексу дорого. Тюньте size на terms aggregations (дефолт 10 — больше = больше памяти + медленнее). cardinality (HyperLogLog++) для unique counts на масштабе — exact counts квадратичны. Для high-cardinality terms (user IDs) — composite agg + paging вместо одной огромной terms agg.
Типичные ошибки
Ловушки Metric aggregations: aggregating без фильтра (сканирует весь индекс); огромный size на terms agg (memory blow-up); aggregating на text поле (используйте keyword subfield); не используют shard_size для контроля intra-shard accuracy vs cost trade-off.