date_histogram

Тема дорожной карты · Elasticsearch

Агрегация date_histogram в Elasticsearch — это бакетная агрегация, группирующая документы в временные бакеты фиксированного календарного интервала и являющаяся основой временного анализа данных в Elastic Stack. Агрегация date_histogram настраивается внутри ключа aggs в запросе POST /<index>/_search, где указывается поле даты через field и интервал через calendar_interval (например, day, week, month) или fixed_interval (например, 1h, 30m). Каждый возвращаемый бакет date_histogram содержит ключ бакета в виде временной метки в миллисекундах и doc_count, показывающий количество документов в данном интервале. Вложенные метрические агрегации — такие как avg, sum или max — можно размещать внутри date_histogram для вычисления статистики по каждому временному бакету: именно так Kibana строит линейные и площадные графики по временным рядам данных Elasticsearch. Агрегация date_histogram также учитывает смещения часовых поясов через параметр time_zone, позволяя выравнивать бакеты по местному рабочему времени, а не по UTC.

Как это работает

date_histogram: суммируйте + группируйте документы во время 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.

Типичные ошибки

Ловушки date_histogram: aggregating без фильтра (сканирует весь индекс); огромный size на terms agg (memory blow-up); aggregating на text поле (используйте keyword subfield); не используют shard_size для контроля intra-shard accuracy vs cost trade-off.

Связанные понятия

Полезные ресурсы