Bucket Aggregation——Date Range Aggregation

文章翻译基于es6.5版本,后续会慢慢一部分,一部分的翻译文档出来。当然,后续会慢慢整理出一本翻译版本,并且有实际java api demo的例子用法和场景。喜欢的就关注看看吧!

Date Range Aggregation
用于日期值的范围聚合。此聚合与普通范围聚合的主要区别在于,from和to值可以用日期数学表达式表示,还可以指定日期格式,以便返回from和to响应字段.
注意,在每个范围聚合都是包含from值,排除to值。
例如:

POST /sales/_search?size=0
{
    "aggs": {
        "range": {
            "date_range": {
                "field": "date",
                "format": "MM-yyy",
                "ranges": [
                    { "to": "now-10M/M" }, //1
                    { "from": "now-10M/M" } //2
                ]
            }
        }
    }
}

1 , < 现在减去10个月,四舍五入到月初。
2, >= 现在减去10个月,四舍五入到月初.

在上面的示例中,我们创建了两个范围存储桶,第一个将“存储”所有早于10个月之前的文档,第二个将“存储”所有自10个月前开始的文档

Response:
{
    ...
    "aggregations": {
        "range": {
            "buckets": [
                {
                    "to": 1.4436576E12,
                    "to_as_string": "10-2015",
                    "doc_count": 7,
                    "key": "*-10-2015"
                },
                {
                    "from": 1.4436576E12,
                    "from_as_string": "10-2015",
                    "doc_count": 0,
                    "key": "10-2015-*"
                }
            ]
        }
    }
}

缺少值(Missing Values)
The missing paramete定义了如何处理缺失值的文档。默认情况下,它们将被忽略,但也可以将它们视为有值。这是通过添加一组fieldname:值映射来指定每个字段的默认值来实现的。

POST /sales/_search?size=0
{
   "aggs": {
       "range": {
           "date_range": {
               "field": "date",
               "missing": "1976/11/30",
               "ranges": [
                  {
                    "key": "Older",
                    "to": "2016/02/01"
                  }, //1
                  {
                    "key": "Newer",
                    "from": "2016/02/01",
                    "to" : "now/d"
                  }
              ]
          }
      }
   }
}

1,在date字段中没有值的文档将被添加到“旧”桶中,就好像它们的日期值是“1899-12-31”一样

Time zone in date range aggregations
通过指定time_zone参数,可以将日期从另一个时区转换为UTC 。
时区可以指定为ISO 8601 UTC偏移量(例如+01:00或-08:00),也可以指定为http://www.joda.org/joda-time/timezones.html [时区ID]之一]来自TZ数据库。
该time_zone参数也适用于日期数学表达式中的舍入。例如,要在CET时区中舍入到一天的开头,您可以执行以下操作:

POST /sales/_search?size=0
{
   "aggs": {
       "range": {
           "date_range": {
               "field": "date",
               "time_zone": "CET",
               "ranges": [
                  { "to": "2016/02/01" },//1
                  { "from": "2016/02/01", "to" : "now/d" //2},
                  { "from": "now/d" }
              ]
          }
      }
   }
}

1,此日期将转换为2016-02-15T00:00:00.000+01:00。
2, now/d 将在CET时区内四舍五入到当天的开头。

Keyed Response
设置keyed 标志为true,将会把唯一的key 和 每个桶关联起来。返回范围的散列而不是数组:

POST /sales/_search?size=0
{
    "aggs": {
        "range": {
            "date_range": {
                "field": "date",
                "format": "MM-yyy",
                "ranges": [
                    { "to": "now-10M/M" },
                    { "from": "now-10M/M" }
                ],
                "keyed": true
            }
        }
    }
}

响应:

{
    ...
    "aggregations": {
        "range": {
            "buckets": {
                "*-10-2015": {   //将响应返回的key,作为桶的key
                    "to": 1.4436576E12,
                    "to_as_string": "10-2015",
                    "doc_count": 7
                },
                "10-2015-*": {
                    "from": 1.4436576E12,
                    "from_as_string": "10-2015",
                    "doc_count": 0
                }
            }
        }
    }
}

每个桶的key还支持自定义:

POST /sales/_search?size=0
{
    "aggs": {
        "range": {
            "date_range": {
                "field": "date",
                "format": "MM-yyy",
                "ranges": [
                    { "from": "01-2015",  "to": "03-2015", "key": "quarter_01" }, //自定义的key
                    { "from": "03-2015", "to": "06-2015", "key": "quarter_02" }
                ],
                "keyed": true
            }
        }
    }
}

Response:

{
    ...
    "aggregations": {
        "range": {
            "buckets": {
                "quarter_01": { //这里是自定义的key
                    "from": 1.4200704E12,
                    "from_as_string": "01-2015",
                    "to": 1.425168E12,
                    "to_as_string": "03-2015",
                    "doc_count": 5
                },
                "quarter_02": {
                    "from": 1.425168E12,
                    "from_as_string": "03-2015",
                    "to": 1.4331168E12,
                    "to_as_string": "06-2015",
                    "doc_count": 2
                }
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值