参考: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进行聚合操作相关推荐

  1. 2021年大数据常用语言Scala(二十七):函数式编程 聚合操作

    目录 聚合操作 聚合  reduce 定义 案例 折叠  fold 定义 案例 聚合操作 聚合操作,可以将一个列表中的数据合并为一个.这种操作经常用来统计分析中 聚合  reduce reduce表示 ...

  2. mongodb的聚合操作

    mongodb的聚合操作 1 mongodb的聚合是什么 聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组.过滤等功 ...

  3. 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 ...

  4. elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg...

    分析 最后,我们还有一个需求需要完成:允许管理者在职员目录中进行一些分析. Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中 ...

  5. OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念...

    先看下 http://www.cnblogs.com/bonelee/p/6236962.html 这里对于环形数据库的介绍,便于理解归档这个操作! 转自:http://blog.sina.com.c ...

  6. MongoDB 聚合操作

    MongoDB 聚合操作 在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多 ...

  7. limit mongodb 聚合_MongoDB 聚合操作(转)

    在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...

  8. Python中的Numpy(3.聚合操作)

    1.ndarray的常用的聚合操作 # 1.最大值/最小值 :np.max / np.min n1 = np.random.randint(0,100,20) print(n1) # 打印出n1中的最 ...

  9. Map端的聚合操作Combiner

    需求 词频统计,假设有一个文件,统计这个文件词频 常见的解决办法 例如原始文本是: 交给两个Map去处理,map1处理hello is hello is,map2处理hadoop is hadoop ...

最新文章

  1. Thread.join()练习
  2. Windows平台:Nginx+Tornado部署Flask
  3. 图文解说oracle视图
  4. 如何通过windows控制linux,如何从Windows远程控制Linux | MOS86
  5. 图灵机器人调用数据恢复_机器人也能撩妹?python程序员自制微信机器人,替他俘获女神芳心...
  6. 【转载保存】Java+Selenium使用
  7. Java-值传递和引用传递
  8. python之MRO和垃圾回收机制
  9. group by调优的一些测试
  10. Linux系统安装MariaDB
  11. 28张高清数据分析全知识地图,强烈建议收藏
  12. Excel按照固定行数拆分为多个文件
  13. Linux作业 使用make命令和分析makefile文件
  14. 【C】指针的相关运算练习题
  15. 远程桌面连接报错解决方法
  16. 群晖download station使用sftp下载文件
  17. 当你手机上有这些APP,那么你就可以把你的兴趣变成赚钱的工具
  18. 局域网的分组管理和域管理的区别
  19. FPGA上板流程Signaltap信号抓取
  20. 新手商家做Shopee的马来站点有什么运营技巧,快速上手教程

热门文章

  1. 串口服务器与协议转换器的区别,串口服务器和串口转以太网模块区别
  2. 海思多媒体(MPP)开发(9)——视频遮挡和运动检测
  3. 数据科学与R语言: 关于我 Rer
  4. gjt常用命令---chalee
  5. 51驱动DS1302制作电子时钟1602显示
  6. 数据生产力崛起:新动能 新治理 - 摘要
  7. 最强内存稳定性测试软件,内存稳定性测试软件TM5
  8. 使用OpenSSL生成证书
  9. Advanced Download Manager(ADM) – 来自俄罗斯的 Android 下载神器,支持下载 BT 种子
  10. narwal机器人_Narwal云鲸扫地机器人扫拖彻底,用户用得更省心省力