ES 时间聚合
数据准备
-
PUT cars { "mappings": { "transactions": { "properties": { "color": { "type": "keyword" }, "make": { "type": "keyword" }, "price": { "type": "long" }, "sold": { "type": "date" } } } } } -
POST /cars/transactions/_bulk { "index": {}} { "price" : 10000, "color" : "red", "make" : "honda", "sold" : "2014-10-28" } { "index": {}} { "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" } { "index": {}} { "price" : 30000, "color" : "green", "make" : "ford", "sold" : "2014-05-18" } { "index": {}} { "price" : 15000, "color" : "blue", "make" : "toyota", "sold" : "2014-07-02" } { "index": {}} { "price" : 12000, "color" : "green", "make" : "toyota", "sold" : "2014-08-19" } { "index": {}} { "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" } { "index": {}} { "price" : 80000, "color" : "red", "make" : "bmw", "sold" : "2014-01-01" } { "index": {}} { "price" : 25000, "color" : "blue", "make" : "ford", "sold" : "2014-02-12" }
使用
-
需求:每月销售多少台汽车?
-
GET /cars/transactions/_search { "size" : 0, "aggs": { "sales": { "date_histogram": { "field": "sold", "interval": "month", "format": "yyyy-MM-dd", "min_doc_count" : 0, "extended_bounds" : { "min" : "2014-01-01", "max" : "2014-12-31" } } } } } -
返回结果 "aggregations": { "sales": { "buckets": [ { "key_as_string": "2014-01-01", "key": 1388534400000, "doc_count": 1 }, { "key_as_string": "2014-02-01", "key": 1391212800000, "doc_count": 1 }, { "key_as_string": "2014-03-01", "key": 1393632000000, "doc_count": 0 }, { "key_as_string": "2014-04-01", "key": 1396310400000, "doc_count": 0 }, { "key_as_string": "2014-05-01", "key": 1398902400000, "doc_count": 1 }, { "key_as_string": "2014-06-01", "key": 1401580800000, "doc_count": 0 }, { "key_as_string": "2014-07-01", "key": 1404172800000, "doc_count": 1 }, { "key_as_string": "2014-08-01", "key": 1406851200000, "doc_count": 1 }, { "key_as_string": "2014-09-01", "key": 1409529600000, "doc_count": 0 }, { "key_as_string": "2014-10-01", "key": 1412121600000, "doc_count": 1 }, { "key_as_string": "2014-11-01", "key": 1414800000000, "doc_count": 2 }, { "key_as_string": "2014-12-01", "key": 1417392000000, "doc_count": 0 } ] } } -
interval以月为间隔 -
format对日期进行格式化 -
min_doc_count强制返回所有 buckets,即使 buckets 可能为空 -
extended_bounds限定日期的最小范围值和最大范围值 -

-
@Test public void test06(){ DateHistogramAggregationBuilder dateHistogramAggregationBuilder = AggregationBuilders.dateHistogram("popular_sold").field("sold") .dateHistogramInterval(DateHistogramInterval.MONTH) .minDocCount(0) .format("yyyy-MM-dd") .extendedBounds(new ExtendedBounds("2014-01-01", "2014-12-31")); SearchResponse searchResponse = elasticsearchTemplate.getClient().prepareSearch("cars") .setTypes("transactions") .addAggregation(dateHistogramAggregationBuilder) .execute() .actionGet(); InternalDateHistogram internalDateHistogram = searchResponse.getAggregations().get("popular_sold"); List<InternalDateHistogram.Bucket> buckets = internalDateHistogram.getBuckets(); for (InternalDateHistogram.Bucket bucket : buckets){ String keyAsString = bucket.getKeyAsString(); long docCount = bucket.getDocCount(); System.out.println(keyAsString+"---"+docCount); } } -
返回结果 2014-01-01---1 2014-02-01---1 2014-03-01---0 2014-04-01---0 2014-05-01---1 2014-06-01---0 2014-07-01---1 2014-08-01---1 2014-09-01---0 2014-10-01---1 2014-11-01---2 2014-12-01---0
本文档展示了如何使用Elasticsearch进行时间序列聚合,以获取每月汽车销售的数量。通过创建索引、插入样本数据,然后执行搜索请求,我们得到了从2014年1月至12月每个月的销售统计,揭示了各个月份的销售情况,例如2014年11月售出了2辆汽车。
3585

被折叠的 条评论
为什么被折叠?



