Es7.x使用RestHighLevelClient进行聚合操作
参考:http://events.jianshu.io/p/cd27fe9cb642
https://www.cnblogs.com/heyouxin/p/13865293.html
聚合操作分为指标聚合和分组聚合。RestHighLevelClient可以使用API方法也可以使用script脚本进行聚合。
1.API聚合方法
@Slf4j
public class EsAggsTest {public static void testAggs() throws IOException {SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();/*** 使用tag字段进行桶分组* 使用sum、avg进行指标聚合*/TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("tag_tr").field("tag"). //桶分组subAggregation(AggregationBuilders.sum("sum_id").field("id")). //求和subAggregation(AggregationBuilders.avg("avg_id").field("id")); //求平均值searchSourceBuilder.aggregation(aggregationBuilder);/*** 不输出原始数据*/searchSourceBuilder.size(0);/*** 打印dsl语句*/log.info("dsl:" + searchSourceBuilder.toString());/*** 设置索引以及填充语句*/SearchRequest searchRequest = new SearchRequest();searchRequest.indices("test_demo");searchRequest.source(searchSourceBuilder);SearchResponse response = EsUtil.getRestHighLevelClient().search(searchRequest, RequestOptions.DEFAULT);/*** 解析数据,获取tag_tr的指标聚合参数。*/Aggregations aggregations = response.getAggregations();ParsedStringTerms parsedStringTerms = aggregations.get("tag_tr");List<? extends Terms.Bucket> buckets = parsedStringTerms.getBuckets();for (Terms.Bucket bucket : buckets) {//key的数据String key = bucket.getKey().toString();long docCount = bucket.getDocCount();//获取数据Aggregations bucketAggregations = bucket.getAggregations();ParsedSum sumId = bucketAggregations.get("sum_id");ParsedAvg avgId = bucketAggregations.get("avg_id");System.out.println(key + ":" + docCount + "-" + sumId.getValue() + "-" + avgId.getValue());}}public static void main(String[] args) throws IOException {testAggs();}
}
输出语句:
09:49:54.950 [main] INFO com.tellme.Test.es.EsAggsTest - dsl:{"size":0,"aggregations":{"tag_tr":{"terms":{"field":"tag","size":10,"min_doc_count":1,"shard_min_doc_count":0,"show_term_doc_count_error":false,"order":[{"_count":"desc"},{"_key":"asc"}]},"aggregations":{"sum_id":{"sum":{"field":"id"}},"avg_id":{"avg":{"field":"id"}}}}}}
疫情:5-24067.0-4813.4
军事:2-2010.0-1005.0
教育:2-2008.0-1004.0
婚姻:1-9001.0-9001.0
dsl语句:
{"size":0,"aggregations":{"tag_tr":{"terms":{"field":"tag","size":10,"min_doc_count":1,"shard_min_doc_count":0,"show_term_doc_count_error":false,"order":[{"_count":"desc"},{"_key":"asc"}]},"aggregations":{"sum_id":{"sum":{"field":"id"}},"avg_id":{"avg":{"field":"id"}}}}}
}
即先对tag字段进行分组聚合,而后对各组的数据进行指标聚合。
3. script聚合方式
/*** 脚本聚合*/public static void testScript() throws IOException {Script script = new Script("doc['tag']+'-'+doc['publishTime']");
// CardinalityAggregationBuilder aggregationBuilder = AggregationBuilders.cardinality("user").script(script);TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("tag_tr").script(script);SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.aggregation(aggregationBuilder);//不输出元素数据searchSourceBuilder.size(0);SearchRequest searchRequest=new SearchRequest();searchRequest.indices("test_demo");searchRequest.source(searchSourceBuilder);log.info("dsl:" + searchSourceBuilder.toString());SearchResponse response = EsUtil.getRestHighLevelClient().search(searchRequest, RequestOptions.DEFAULT);Aggregations aggregations = response.getAggregations();//获取配置ParsedStringTerms parsedStringTerms = aggregations.get("tag_tr");List<? extends Terms.Bucket> buckets = parsedStringTerms.getBuckets();for (Terms.Bucket bucket : buckets) {//key的数据String key = bucket.getKey().toString();long docCount = bucket.getDocCount();//获取数据System.out.println(key + ":" + docCount);}}
转换为dsl:
{"size":0,"aggregations":{"tag_tr":{"terms":{"script":{"source":"doc['tag']+'-'+doc['publishTime']","lang":"painless"},"size":10,"min_doc_count":1,"shard_min_doc_count":0,"show_term_doc_count_error":false,"order":[{"_count":"desc"},{"_key":"asc"}]}}}
}
输出结果:
[军事]-[2021-05-13T17:33:14.000Z]:2
[教育]-[2021-05-13T17:33:14.000Z]:2
[疫情]-[2021-05-13T17:33:14.000Z]:2
[婚姻]-[2021-05-17T15:15:07.000Z]:1
[疫情]-[2021-05-14T11:40:06.000Z]:1
[疫情]-[2021-05-14T17:44:37.000Z]:1
[疫情]-[2021-05-14T17:50:42.000Z]:1
Es7.x使用RestHighLevelClient进行聚合操作相关推荐
- 2021年大数据常用语言Scala(二十七):函数式编程 聚合操作
目录 聚合操作 聚合 reduce 定义 案例 折叠 fold 定义 案例 聚合操作 聚合操作,可以将一个列表中的数据合并为一个.这种操作经常用来统计分析中 聚合 reduce reduce表示 ...
- mongodb的聚合操作
mongodb的聚合操作 1 mongodb的聚合是什么 聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组.过滤等功 ...
- python和R对dataframe的分组聚合操作:dplyr、groupby、agg、group_by、nunique、reset_index、rename、summarise、n_distinct
python和R对dataframe的分组聚合操作:dplyr.groupby.agg.group_by.nunique.reset_index.rename.summarise.n_distinct ...
- elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg...
分析 最后,我们还有一个需求需要完成:允许管理者在职员目录中进行一些分析. Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中 ...
- OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念...
先看下 http://www.cnblogs.com/bonelee/p/6236962.html 这里对于环形数据库的介绍,便于理解归档这个操作! 转自:http://blog.sina.com.c ...
- MongoDB 聚合操作
MongoDB 聚合操作 在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多 ...
- limit mongodb 聚合_MongoDB 聚合操作(转)
在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...
- Python中的Numpy(3.聚合操作)
1.ndarray的常用的聚合操作 # 1.最大值/最小值 :np.max / np.min n1 = np.random.randint(0,100,20) print(n1) # 打印出n1中的最 ...
- Map端的聚合操作Combiner
需求 词频统计,假设有一个文件,统计这个文件词频 常见的解决办法 例如原始文本是: 交给两个Map去处理,map1处理hello is hello is,map2处理hadoop is hadoop ...
最新文章
- Thread.join()练习
- Windows平台:Nginx+Tornado部署Flask
- 图文解说oracle视图
- 如何通过windows控制linux,如何从Windows远程控制Linux | MOS86
- 图灵机器人调用数据恢复_机器人也能撩妹?python程序员自制微信机器人,替他俘获女神芳心...
- 【转载保存】Java+Selenium使用
- Java-值传递和引用传递
- python之MRO和垃圾回收机制
- group by调优的一些测试
- Linux系统安装MariaDB
- 28张高清数据分析全知识地图,强烈建议收藏
- Excel按照固定行数拆分为多个文件
- Linux作业 使用make命令和分析makefile文件
- 【C】指针的相关运算练习题
- 远程桌面连接报错解决方法
- 群晖download station使用sftp下载文件
- 当你手机上有这些APP,那么你就可以把你的兴趣变成赚钱的工具
- 局域网的分组管理和域管理的区别
- FPGA上板流程Signaltap信号抓取
- 新手商家做Shopee的马来站点有什么运营技巧,快速上手教程
热门文章
- 串口服务器与协议转换器的区别,串口服务器和串口转以太网模块区别
- 海思多媒体(MPP)开发(9)——视频遮挡和运动检测
- 数据科学与R语言: 关于我 Rer
- gjt常用命令---chalee
- 51驱动DS1302制作电子时钟1602显示
- 数据生产力崛起:新动能 新治理 - 摘要
- 最强内存稳定性测试软件,内存稳定性测试软件TM5
- 使用OpenSSL生成证书
- Advanced Download Manager(ADM) – 来自俄罗斯的 Android 下载神器,支持下载 BT 种子
- narwal机器人_Narwal云鲸扫地机器人扫拖彻底,用户用得更省心省力