Elasticsearch聚合 之 Date Histogram聚合
阿新 • • 發佈:2018-12-30
Elasticsearch的聚合主要分成兩大類:metric和bucket,2.0中新增了pipeline還沒有研究。本篇還是來介紹Bucket聚合中的常用聚合——date histogram.參考:官方文件
用法
Date histogram的用法與histogram差不多,只不過區間上支援了日期的表示式。
{ "aggs":{ "articles_over_time":{ "date_histogram":{ "field":"date", "interval":"month" } } } }
interval欄位支援多種關鍵字:`year`, `quarter`, `month`, `week`, `day`, `hour`, `minute`, `second`
當然也支援對這些關鍵字進行擴充套件使用,比如一個半小時可以定義成如下:
{ "aggs":{ "articles_over_time":{ "date_histogram":{ "field":"date", "interval":"1.5h" } } } }
返回的結果可以通過設定format進行格式化:
{
"aggs":{
"articles_over_time":{
"date_histogram":{
"field":"date",
"interval":"1M",
"format":"yyyy-MM-dd"
}
}
}
}
得到的結果如下:
{ "aggregations":{ "articles_over_time":{ "buckets":[{ "key_as_string":"2013-02-02", "key":1328140800000, "doc_count":1 },{ "key_as_string":"2013-03-02", "key":1330646400000, "doc_count":2 }, ... ]} } }
其中key_as_string是格式化後的日期,key顯示了是日期時間戳,
time_zone時區的用法
在es中日期支援時區的表示方法,這樣就相當於東八區的時間。
{
"aggs":{
"by_day":{
"date_histogram":{
"field":"date",
"interval":"day",
"time_zone":"+08:00"
}
}
}
}
offset 使用偏移值,改變時間區間
預設情況是從凌晨0點到午夜24:00,如果想改變時間區間,可以通過下面的方式,設定偏移值:
{"aggs":{
"by_day":{
"date_histogram":{
"field":"date",
"interval":"day",
"offset":"+6h"
}
}
}
}
那麼桶的區間就改變為:
"aggregations":{
"by_day":{
"buckets":[{
"key_as_string":"2015-09-30T06:00:00.000Z",
"key":1443592800000,
"doc_count":1
},{
"key_as_string":"2015-10-01T06:00:00.000Z",
"key":1443679200000,
"doc_count":1
}]
}
}
Missing Value預設欄位
當遇到沒有值的欄位,就會按照預設欄位missing value來計算:
{
"aggs":{
"publish_date":{
"date_histogram":{
"field":"publish_date",
"interval":"year",
"missing":"2000-01-01"
}
}
}
}
其他
對於其他的一些用法,這裡就不過多贅述了,比如指令碼、Order、min_doc_count過濾,extended_bounds等都是支援的。