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提供 ...
最新文章
- web-httpd2.4编译安装
- mysql docker 制作_docker 制作自己的mysql镜像
- 视频 + PPT 下载 | 《财富管理数字化转型现状与趋势洞察报告》解读第一讲
- PDF解决方案(2)--文件转PDF
- java message_Java Message System简介
- Asp.net页面之间传递参数的几种方法荟萃
- Scikit-learn数据变换
- 统计过程控制图SPC(2)
- 计算DSP程序运行时间
- threejs 720/360全景工具开发心得
- Kryo 高性能序列化和反序列化
- 用python实现矩形图片转换正方形(防失真 + 文件批量可操作)
- mysql8 2058_SQLyog连接MySQL8.0报2058错误的解决方案
- DOM初探(16)——查看元素的集合尺寸
- Android 开源组件和第三方库汇总
- CVPR2020 | 即插即用!将双边超分辨率用于语义分割网络,提升图像分辨率的有效策略...
- 不从装VS6 MSDN
- linux termios 详解
- 黑马程序员C++笔记
- 国际珠宝品牌潘多拉推出中国猪年定制系列
热门文章
- linux下删除有锁的文件夹,Linux 文件夹右下角有锁,解锁
- 分支定界法上下界_分支定界(Branch-and-Cut)方法的逻辑
- 天线发射功率计算公式_怎样计算天线直径发射功率卫星租用带宽
- (65)如何根据句柄从二级、三级结构句柄表中找到内核对象
- (10)调用门提权(无参数)
- 2020-11-16(深入理解计算机系统2.4节选)
- 7、Java Swing JTextArea:文本域组件。 JScrollPane:滚动窗口
- 2.3.6 生产者消费者问题
- macbookpro升级后打不开eclipse_维修分享——面容坏升级iOS13系统后 导致前后摄像头都打不开...
- 程序员,想要彻底弄懂Redis,这15点你一定要明白~(纯干货)