天天看點

Elasticsearch聚合 之 Date Histogram聚合

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進行格式化:

"interval":"1M",

"format":"yyyy-MM-dd"

}

得到的結果如下:

"aggregations":{

"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中日期支援時區的表示方法,這樣就相當于東八區的時間。

"by_day":{

"interval":"day",

"time_zone":"+08:00"

## offset 使用偏移值,改變時間區間

預設情況是從淩晨0點到午夜24:00,如果想改變時間區間,可以通過下面的方式,設定偏移值:

{"aggs":{

"by_day":{

"date_histogram":{

"field":"date",

"interval":"day",

"offset":"+6h"

那麼桶的區間就改變為:

"aggregations":{

"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,

}]

## Missing Value預設字段

當遇到沒有值的字段,就會按照預設字段missing value來計算:

"publish_date":{

"field":"publish_date",

"interval":"year",

"missing":"2000-01-01"

## 其他

對于其他的一些用法,這裡就不過多贅述了,比如腳本、Order、min_doc_count過濾,extended_bounds等都是支援的。

作者:xingoo

出處:http://www.cnblogs.com/xing901022

本文版權歸作者和部落格園共有。歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接!

繼續閱讀