Intervals
editIntervals
editThe interval of the returned buckets is selected based on the data collected by the aggregation so that the number of buckets returned is less than or equal to the number requested. The possible intervals returned are:
seconds |
In multiples of 1, 5, 10 and 30 |
minutes |
In multiples of 1, 5, 10 and 30 |
hours |
In multiples of 1, 3 and 12 |
days |
In multiples of 1, and 7 |
months |
In multiples of 1, and 3 |
years |
In multiples of 1, 5, 10, 20, 50 and 100 |
In the worst case, where the number of daily buckets are too many for the requested number of buckets, the number of buckets returned will be 1/7th of the number of buckets requested.
Time Zone
editDate-times are stored in Elasticsearch in UTC. By default, all bucketing and
rounding is also done in UTC. The time_zone
parameter can be used to indicate
that bucketing should use a different time zone.
Time zones may either be specified as an ISO 8601 UTC offset (e.g. +01:00
or
-08:00
) or as a timezone id, an identifier used in the TZ database like
America/Los_Angeles
.
Consider the following example:
PUT my_index/log/1?refresh { "date": "2015-10-01T00:30:00Z" } PUT my_index/log/2?refresh { "date": "2015-10-01T01:30:00Z" } PUT my_index/log/3?refresh { "date": "2015-10-01T02:30:00Z" } GET my_index/_search?size=0 { "aggs": { "by_day": { "auto_date_histogram": { "field": "date", "buckets" : 3 } } } }
UTC is used if no time zone is specified, three 1-hour buckets are returned starting at midnight UTC on 1 October 2015:
{ ... "aggregations": { "by_day": { "buckets": [ { "key_as_string": "2015-10-01T00:00:00.000Z", "key": 1443657600000, "doc_count": 1 }, { "key_as_string": "2015-10-01T01:00:00.000Z", "key": 1443661200000, "doc_count": 1 }, { "key_as_string": "2015-10-01T02:00:00.000Z", "key": 1443664800000, "doc_count": 1 } ], "interval": "1h" } } }
If a time_zone
of -01:00
is specified, then midnight starts at one hour before
midnight UTC:
GET my_index/_search?size=0 { "aggs": { "by_day": { "auto_date_histogram": { "field": "date", "buckets" : 3, "time_zone": "-01:00" } } } }
Now three 1-hour buckets are still returned but the first bucket starts at 11:00pm on 30 September 2015 since that is the local time for the bucket in the specified time zone.
{ ... "aggregations": { "by_day": { "buckets": [ { "key_as_string": "2015-09-30T23:00:00.000-01:00", "key": 1443657600000, "doc_count": 1 }, { "key_as_string": "2015-10-01T00:00:00.000-01:00", "key": 1443661200000, "doc_count": 1 }, { "key_as_string": "2015-10-01T01:00:00.000-01:00", "key": 1443664800000, "doc_count": 1 } ], "interval": "1h" } } }
When using time zones that follow DST (daylight savings time) changes,
buckets close to the moment when those changes happen can have slightly different
sizes than neighbouring buckets.
For example, consider a DST start in the CET
time zone: on 27 March 2016 at 2am,
clocks were turned forward 1 hour to 3am local time. If the result of the aggregation
was daily buckets, the bucket covering that day will only hold data for 23 hours
instead of the usual 24 hours for other buckets. The same is true for shorter intervals
like e.g. 12h. Here, we will have only a 11h bucket on the morning of 27 March when the
DST shift happens.
Scripts
editLike with the normal date_histogram
, both document level
scripts and value level scripts are supported. This aggregation does not however, support the min_doc_count
,
extended_bounds
and order
parameters.
Missing value
editThe missing
parameter defines how documents that are missing a value should be treated.
By default they will be ignored but it is also possible to treat them as if they
had a value.