当前位置: 首页 > news >正文

黑马聚合的分类及实现

1、什么是聚合?

聚合是对文档数据的统计、分析、计算

聚合的常见种类有哪些?
        桶(Bucket)聚合:用来对文档做分组
                TermAggregation:按照文档字段值分组

                Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组

        度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等
                AVg:求平均值
                Max:求最大值
                Min:求最小值
                Stats:同时求max、min、avg、sum等

        Pipeline:基于其它聚合结果再做聚合

参与聚合的字段类型必须是:
        keyword
        数值
        日期
        布尔

2、DSL实现Bucket聚合

        

        可以新增在aggs内order字段以自定义排序规则,也可以在最外层新增query来限定聚合范围

aggs代表聚合,与query同级,此时query的作用是?

        限定聚合的的文档范围

聚合必须的三要素:
        聚合名称
        聚合类型
        聚合字段

聚合可配置属性有:
        size:指定聚合结果数量
        order:指定聚合结果排序方式
        field:指定聚合字段

3、DSL实现Metrics聚合

        在聚合类型同级多加一层聚合即可,如图

4、RestClient实现聚合

@Testvoid testAggregation() throws IOException {//1、准备RequestSearchRequest request = new SearchRequest("hotel");//2、准备dslrequest.source().size(0);request.source().aggregation(AggregationBuilders.terms("brandAgg").field("brand").size(10));//3、发出请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);//4、解析结果Aggregations aggregations = response.getAggregations();Terms brandTerms = aggregations.get("brandAgg");List<? extends Terms.Bucket> buckets = brandTerms.getBuckets();for (Terms.Bucket bucket : buckets) {String keyAsString = bucket.getKeyAsString();System.out.println(keyAsString);}}

        封装请求信息逐层封装,解析相应结果逐层解析即可

        注意返回值类型与方法传参,ctrl+p可以提示方法所需形参类型

        多条件聚合只需增加aggregations,并在取出结果时逐一拆分即可

    @Overridepublic Map<String, List<String>> filters() {try {SearchRequest request = new SearchRequest("hotel");Map<String, List<String>> result = new HashMap<>();buildAggregation(request);SearchResponse response = client.search(request, RequestOptions.DEFAULT);Aggregations aggregations = response.getAggregations();List<String> brandlist = getAggByName(aggregations,"brandAgg");result.put("品牌",brandlist);result.put("星级",getAggByName(aggregations,"starNameAgg"));result.put("城市",getAggByName(aggregations,"cityAgg"));return result;} catch (IOException e) {throw new RuntimeException(e);}}private static List<String> getAggByName(Aggregations aggregations,String aggName) {Terms brandterms = aggregations.get(aggName);List<String> brandlist = new ArrayList<>();List<? extends Terms.Bucket> buckets = brandterms.getBuckets();for (Terms.Bucket bucket : buckets) {brandlist.add(bucket.getKeyAsString());}return brandlist;}private static void buildAggregation(SearchRequest request) {request.source().aggregation(AggregationBuilders.terms("brandAgg").size(100).field("brand"));request.source().aggregation(AggregationBuilders.terms("cityAgg").size(100).field("city"));request.source().aggregation(AggregationBuilders.terms("starNameAgg").size(100).field("starName"));}

相关文章:

  • 埃及媒体分发投放-新闻媒体通稿发布
  • [数据集][目标检测]红外车辆检测数据集VOC+YOLO格式13979张类别
  • K8s Pod 资源进阶
  • C++课程设计实验杭州电子科技大学ACM题目(上)
  • 跳绳技巧一:蝴蝶步
  • 【NumPy】NumPy线性代数模块详解:掌握numpy.linalg的核心功能
  • Vue 3入门指南
  • adb获取包名和界面名
  • Apifox 更新|编排模式、Markdown 编辑器升级、自动申请 SSL 证书、用户反馈问题优化
  • CSS:transform作用
  • 网络安全防护技术的应用
  • 详解 Scala 的泛型
  • 爬虫视图展示之 Power BI
  • JS 实现鼠标框选(页面选择)时返回对应的 HTML 或文案内容
  • CSS学习笔记:Less
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • gcc介绍及安装
  • go语言学习初探(一)
  • Hibernate【inverse和cascade属性】知识要点
  • Javascripit类型转换比较那点事儿,双等号(==)
  • opencv python Meanshift 和 Camshift
  • Ruby 2.x 源代码分析:扩展 概述
  • SegmentFault 2015 Top Rank
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • V4L2视频输入框架概述
  • 订阅Forge Viewer所有的事件
  • 基于Android乐音识别(2)
  • 如何使用 JavaScript 解析 URL
  • 十年未变!安全,谁之责?(下)
  • 译自由幺半群
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #HarmonyOS:Web组件的使用
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (1)Jupyter Notebook 下载及安装
  • (2)空速传感器
  • (C++17) optional的使用
  • (C11) 泛型表达式
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (web自动化测试+python)1
  • (二)hibernate配置管理
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .net core Redis 使用有序集合实现延迟队列
  • .net 调用海康SDK以及常见的坑解释
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .Net多线程总结
  • .NET开发人员必知的八个网站
  • :not(:first-child)和:not(:last-child)的用法
  • @Autowired 与@Resource的区别
  • @Autowired和@Resource的区别
  • @Autowired注解的实现原理
  • @RequestBody的使用