【大数据】es Elasticsearch 时间分组聚合查询

正常业务逻辑中,会出现大量的数据统计,比如说分组聚合查询,根据天进行数据的统计,记录下es分组聚合查询

{
“size”: 0,
“aggs”: {
“groupDate”: {
“date_histogram”: {
“field”: “create_date”,
“interval”: “day”,
“format”: “yyyy-MM-dd”
}
}
}
}

此处使用按天分组,可用的时间间隔表达式:year, quarter, month, week, day, hour, minute, second(年份、季度、月、周、日、小时、分钟、秒)。

{
“size”: 0,
“aggs”: {
“groupDate”: {
“date_histogram”: {
“field”: “create_date”,
“interval”: “90m”,
“format”: “yyyy-MM-dd”
}
}
}
}

此处也可以根据小时分组,1.5h则用分钟来表示(90m)
上面是官方提供的方法,size属性可以控制是否返回聚合的数据结果集,因为我们设置了 size 参数,所以不会有 hits 搜索结果返回。

{
“aggregations”:{
“groupDate”:{
“buckets”:[
{
“key_as_string”:“2018-08-28”,
“key”:1535430600000,
“doc_count”:590000
},
{
“key_as_string”:“2018-08-28”,
“key”:1535436000000,
“doc_count”:470000
}
]
}
}
}

groupDate 聚合是作为 aggregations 字段的一部分被返回的,每一个 key 都与分组条件对应,我这里是根据1.5小时分组,key 将会显示分组的时间,doc_count 字段,将会告诉我们包含此项的文档数量。
下面是根据官方文档给出的api调用方式:

// 声明where 条件
BoolQueryBuilder qbs = QueryBuilders.boolQuery();

AggregationBuilder aggregation = AggregationBuilders.dateHistogram(“agg”).field(“create_time”)
.interval(DateHistogramInterval.DAY).format(“yyyy-MM-dd”);

SearchRequestBuilder requestBuilder = client.prepareSearch(“user_login_detail”)
.setTypes(“login_detail”);
requestBuilder.setQuery(qbs);
requestBuilder.addAggregation(aggregation);
SearchResponse response = requestBuilder.execute().actionGet();
Histogram agg = response.getAggregations().get(“agg”);

// For each entry
for (Histogram.Bucket entry : agg.getBuckets()) {
String key = StringUtil.nullBlank(entry.getKey());
String keyAsString = entry.getKeyAsString();
long docCount = entry.getDocCount();

System.out.println(“key [{” + keyAsString + “}]”);
System.out.println(“date [{” + key + “}]”);
System.out.println(“doc_count [{” + docCount + “}]”);
}

DateHistogramInterval.DAY 方法提供根据天分组或者是根据时间间隔分组
————————————————
版权声明:本文为CSDN博主「不要忘记当初的目标」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jianshaoguang8886/article/details/82178817

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值