es对分组后结果进行统计_ElasticSearch里面如何分组后根据sum值排序
ElasticSearch里面的聚合机制非常灵活和强大,今天我们来看下如何在ElasticSearch里面实现分组后,根据sum值进行排序?类似的数据库SQL如下:
select id,sum(c1) as c1 , sum(c2) as c2 from table1 group id order by c1 desc, c2 asc
这是一个比较常见的统计需求,在es也能比较轻松的实现,先看看curl的一个实现例子查询:
GET myindex/_search
{
"size":0,
"aggs": {
"a1": {
"terms": {
"field": "FIELD1",
"size":0,
"order": {"a2": "desc"}
},
"aggs":{
"a2":{
"sum":{
"field":"FIELD2.SUBFIELD"
}
}
}
}
}
}
然后,我们看下,如何在Java Api里面操作:
首先我们看下造的数据
总共三个字段id,count,code都是int类型的
id,count,code
1,3,1
2,4,1
1,5,2
2,7,1
3,11,7
然后,我们可以将上面的数据插入到es里面,具体的插入代码不在给出,比较简单,直接通过client.prepareIndex方法插入json即可。
下面看下查询代码:
public void groupTest(){
//构建查询请求体
SearchRequestBuilder search = client.prepareSearch("gv_test").setTypes("gv_test");
//分组字段是id,排序由多个字段排序组成
TermsBuilder tb= AggregationBuilders.terms("id").field("id").order(Terms.Order.compound(
Terms.Order.aggregation("sum_count",false)//先按count,降序排
,
Terms.Order.aggregation("sum_code",true)//如果count相等情况下,使用code的和排序
));
//求和字段1
SumBuilder sb= AggregationBuilders.sum("sum_count").field("count");
//求和字段2
SumBuilder sb_code= AggregationBuilders.sum("sum_code").field("code");
tb.subAggregation(sb);//添加到分组聚合请求中
tb.subAggregation(sb_code);//添加到分组聚合请求中
//将分组聚合请求插入到主请求体重
search.addAggregation(tb);
//发送查询,获取聚合结果
Terms tms= search.get().getAggregations().get("id");
//遍历每一个分组的key
for(Terms.Bucket tbb:tms.getBuckets()){
//获取count的和
Sum sum= tbb.getAggregations().get("sum_count");
//获取code的和
Sum sum2=tbb.getAggregations().get("sum_code");
System.out.println(tbb.getKey()+" " + tbb.getDocCount() +" "+sum.getValue()+" "+sum2.getValue());
}
//释放资源
client.close();
}
最终的结果如下:
id,分组个数,count的和,code和
2 2 11.0 2.0
3 1 11.0 7.0
1 2 8.0 3.0
通过对比,我们可以到到结果是准确的,虽然代码量比sql多很多,但是ElasticSearch的聚合功能却是非常的强大和灵活,用来做一些OLAP分析是非常方便的。
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
es对分组后结果进行统计_ElasticSearch里面如何分组后根据sum值排序相关推荐
- es对分组后结果进行统计_elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg...
分析 最后,我们还有一个需求需要完成:允许管理者在职员目录中进行一些分析. Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中 ...
- collectors 求和_Collectors.groupingBy() 分组、求和、统计、平均、最大(小)值
public classgroupingBy {public static voidmain(String[]args) {ArrayListlist = newArrayList<>() ...
- goland gorm分组查询统计_golang gorm 计算字段和获取sum()值的实现
计算表lb_ytt_user_money_log 中,字段money的和 代码如下: var total_money []int sqlstr := `select SUM(money) as tot ...
- mysql分组后按条件统计_Mysql-分组按条件统计
现在有数据表,保存消息信息,包括消息类型,阅读状态,推送时间等字段,如附件图片.需求是要根据消息类型分组,找出每组最后推送时间,最后推送的消息标题,以及是否有未读信息,未读信息的数量等内容. 获取每种 ...
- java操作es聚合操作并显示其他字段_java使用elasticsearch分组进行聚合查询过程解析...
这篇文章主要介绍了java使用elasticsearch分组进行聚合查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java连接elas ...
- java操作es聚合操作并显示其他字段_java使用elasticsearch分组进行聚合查询(group by)-项目中实际应用...
java连接elasticsearch 进行聚合查询进行相应操作 一:对单个字段进行分组求和 1.表结构图片: 根据任务id分组,分别统计出每个任务id下有多少个文字标题 1.SQL:select i ...
- python分组统计数据_数据分组统计
统计分析数据的时候,经常需要进行分组统计.分组操作在python里的实现方式就是groupby语句. 惯例,咱们先造一个DataFrame表. import pandas as pd dic={ 'c ...
- 07-17 分组聚合--基本的统计方法
分组聚合–主要有以下知识点: 1.描述性统计知识 ,如min() 最小值,max() 最大值,median() --中位数,mead() 均值,quantitle 分位数,quantitle(0.1, ...
- 【python数据分析】数据的分组,遍历,统计
数据的分组,遍历,统计 俗话说:"人与类聚,物以群分",到这里我们将学习数据的分组以及分组后统计.Pandas的分组相对于Excel会更加简单和灵活. 1️⃣分组 Pandas提供 ...
最新文章
- 计算机组成原理cache命中率
- UA MATH566 统计理论1 充分统计量例题答案3
- opencv python destroyAllWindows() destroyWindow() 销毁窗口
- 箭头标线的类型和面积
- 0326互联网新闻 | 字节跳动推出阅读产品番茄小说;微信正式上线物流助手接口功能...
- python中temp_python temp是什么
- cdev_init() / cedev_alloc() / cdev_del()
- 机器学习算法-随机森林之决策树R 代码从头暴力实现(3)
- GitHub项目功能理解
- 几种关系型数据库比较
- Sublime Text3 python交互式环境+快捷键设置
- python——类别型数据标签二值化-one_hot编码
- OpenSolaris系统管理
- 小蚂蚁学习C语言(2)——C语言编程预备知识(上)
- 056 日志的正则式方式加载
- 李雅普诺夫(第二方法)稳定性分析+例题
- 计算机学win7画图,win7自带画图工具(mspaint.exe)
- Chrome的视频加速插件
- jQuery删除表格中指定行
- 谷歌 Google Custom Search 站内搜索功能
热门文章
- 2020-11-25(《深入理解计算机系统》多级页表详解)
- 博客从“新浪云“迁移到CSDN的说明
- 1.2 String字符串和整型int的相互转换,valueOf() 、parse()和toString()
- 如何转载别人的CSDN文章
- Python网络爬虫与信息提取(二):网络爬虫之提取
- MySQL中的用户管理
- Mybatis动态的添加删除列
- MySQL查询所有字段
- 海量数据下如何使用多线程的导出 Excel
- 你一定不知道的 Linux 使用技巧