文章翻译基于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
}
}
}
}
}