Агрегации
Тема дорожной карты · Elasticsearch
Агрегации в Elasticsearch — мощный инструмент для вычисления сводной информации по данным, далеко выходящий за рамки простой выборки документов. В отличие от стандартного запроса _search, возвращающего совпадающие документы, агрегации группируют, подсчитывают и вычисляют статистику по данным индекса в рамках одного запроса. Elasticsearch поддерживает три основных семейства агрегаций: бакетные (group documents into buckets), метрические (вычисляют числовые значения — средние, максимальные и т. д.) и конвейерные (работают с результатами других агрегаций). Агрегации составляются внутри ключа aggs в теле запроса Query DSL и могут вкладываться друг в друга для получения многомерной аналитики. Слой визуализации Kibana целиком построен на агрегациях Elasticsearch, что делает их центральным элементом возможностей Elastic Stack в области наблюдаемости и аналитики поиска.
Как это работает
Агрегации: суммируйте + группируйте документы во время 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.
Типичные ошибки
Ловушки Агрегации: aggregating без фильтра (сканирует весь индекс); огромный size на terms agg (memory blow-up); aggregating на text поле (используйте keyword subfield); не используют shard_size для контроля intra-shard accuracy vs cost trade-off.