Auto-interval Date Histogram Aggregation

类似于日期直方图聚合的多桶聚合,除了不提供用作每个桶的宽度的间隔之外,提供目标桶数,指示所需的桶的数量以及桶的间隔被自动选择为最佳实现这一目标。返回的桶数始终小于或等于此目标数。

存储桶字段是可选的,如果未指定,则默认为10个存储桶。

请求10个桶的目标。

  1. POST /sales/_search?size=0
  2. {
  3. "aggs" : {
  4. "sales_over_time" : {
  5. "auto_date_histogram" : {
  6. "field" : "date",
  7. "buckets" : 10
  8. }
  9. }
  10. }
  11. }

Keys

在内部,日期表示为64位数字,表示自从该纪元以来以毫秒为单位的时间戳。这些时间戳作为桶密钥返回。key_as_string是使用format参数指定的格式转换为格式化日期字符串的相同时间戳:

TIP 如果未指定格式,则它将使用字段映射中指定的第一个日期格式。

  1. POST /sales/_search?size=0
  2. {
  3. "aggs" : {
  4. "sales_over_time" : {
  5. "auto_date_histogram" : {
  6. "field" : "date",
  7. "buckets" : 5,
  8. "format" : "yyyy-MM-dd" #@1
  9. }
  10. }
  11. }
  12. }

@1: 支持富有表现力的日期格式模式

Response:

  1. {
  2. ...
  3. "aggregations": {
  4. "sales_over_time": {
  5. "buckets": [
  6. {
  7. "key_as_string": "2015-01-01",
  8. "key": 1420070400000,
  9. "doc_count": 3
  10. },
  11. {
  12. "key_as_string": "2015-02-01",
  13. "key": 1422748800000,
  14. "doc_count": 2
  15. },
  16. {
  17. "key_as_string": "2015-03-01",
  18. "key": 1425168000000,
  19. "doc_count": 2
  20. }
  21. ],
  22. "interval": "1M"
  23. }
  24. }
  25. }

间隔
根据聚合收集的数据选择返回桶的间隔,以便返回的桶数小于或等于请求的数量。返回的可能间隔是:

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
day In multiples of 1, and 7
months In multiples of 1, and 3
years In multiples of 1,5,10,20,50 and 100

Time Zone
日期时间以UTC格式存储在Elasticsearch中。默认情况下,所有分段和舍入也以UTC格式完成。time_zone参数可用于指示bucketing应使用不同的时区。

时区可以指定为ISO 8601 UTC偏移量(例如+01:00或-08:00),也可以指定为时区ID,TZ数据库中使用的标识符,如America / Los_Angeles。

请考虑以下示例:

  1. PUT my_index/log/1?refresh
  2. {
  3. "date": "2015-10-01T00:30:00Z"
  4. }
  5. PUT my_index/log/2?refresh
  6. {
  7. "date": "2015-10-01T01:30:00Z"
  8. }
  9. PUT my_index/log/3?refresh
  10. {
  11. "date": "2015-10-01T02:30:00Z"
  12. }
  13. GET my_index/_search?size=0
  14. {
  15. "aggs": {
  16. "by_day": {
  17. "auto_date_histogram": {
  18. "field": "date",
  19. "buckets" : 3
  20. }
  21. }
  22. }
  23. }

如果未指定时区,则使用UTC,从2015年10月1日午夜UTC开始返回三个1小时的桶:

  1. {
  2. ...
  3. "aggregations": {
  4. "by_day": {
  5. "buckets": [
  6. {
  7. "key_as_string": "2015-09-30T23:00:00.000-01:00",
  8. "key": 1443657600000,
  9. "doc_count": 1
  10. },
  11. {
  12. "key_as_string": "2015-10-01T00:00:00.000-01:00", #@1
  13. "key": 1443661200000,
  14. "doc_count": 1
  15. },
  16. {
  17. "key_as_string": "2015-10-01T01:00:00.000-01:00",
  18. "key": 1443664800000,
  19. "doc_count": 1
  20. }
  21. ],
  22. "interval": "1h"
  23. }
  24. }
  25. }

@1: key_as_string值表示指定时区中每天的午夜。

WARNING 当使用遵循DST(夏令时)更改的时区时,接近发生这些更改的时刻的存储桶可能与相邻存储桶的大小略有不同。例如,考虑在CET时区的DST开始:在2016年3月27日凌晨2点,时钟在当地时间1小时至凌晨3点转发。如果聚合的结果是每日桶,则当天的桶仅保存23小时的数据,而不是其他桶的通常24小时。对于例如较短的间隔,情况也是如此。12小时。在这里,当DST转变发生时,我们将在3月27日早上只有一个11小时的水桶。

Scripts

与普通的date_histogram一样,支持文档级脚本和值级脚本。但是,此聚合不支持min_doc_count,extended_bounds和order参数。

Missing value

缺少的参数定义了应该如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值。

  1. POST /sales/_search?size=0
  2. {
  3. "aggs" : {
  4. "sale_date" : {
  5. "auto_date_histogram" : {
  6. "field" : "date",
  7. "buckets": 10,
  8. "missing": "2000/01/01" # @1
  9. }
  10. }
  11. }
  12. }

@1: 在publish_date字段中没有值的文档将与具有值2000-01-01的文档属于同一个存储桶。