黑马聚合的分类及实现

server/2024/12/23 6:16:35/

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"));}


http://www.ppmy.cn/server/44944.html

相关文章

手把手教你如何使用BurpSuite

Burp Suite是什么&#xff1f; 概述 Burp Suite是由PortSwigger公司开发的一款综合性Web应用安全测试工具。它是安全研究人员和渗透测试人员的标准工具&#xff0c;用于识别和利用Web应用程序中的漏洞。Burp Suite提供了一系列强大的功能&#xff0c;帮助用户对Web应用进行全…

计算机网络套接字知识(非常详细)从零基础入门到精通

本节重点 认识IP地址, 端口号, 网络字节序等网络编程中的基本概念; 学习socket api的基本用法; 一、预备知识 1.理解源IP地址和目的IP地址 ⭐在IP数据包头部中&#xff0c;有两个IP地址&#xff0c;分别叫做源IP地址和目的IP地址。 思考: 我们光有IP地址就可以完成通信了…

leetcode 712.两个字符串的最小ASCII删除和

思路&#xff1a;LCS&#xff0c;dp 其实就是把dp的状态信息变了一下&#xff0c;但是本质上的状态转移其实是没有很大的变动&#xff0c;既然是让我们删除其他不一样的字符&#xff0c;那么保留下来的肯定就是两个字符串的最长公共子序列了。这样的我们就可以设状态方程为最长…

蓝桥杯第1022题 玩具蛇 基础DFS C++ Java

题目 思路和解题方法 问题理解&#xff1a;此题要求找出将一条由16节正方形构成的玩具蛇放入4x4的方格中的不同方式数。每节蛇可以是直线或直角转弯&#xff0c;且蛇的形状需要完全覆盖盒子里的16个格子&#xff0c;每个格子仅被蛇的一个部分占据。 状态表示&#xff1a;使用一…

Android 13 VSYNC重学习

Android 13 VSYNC重学习 引言 学无止境&#xff0c;一个字干就完事&#xff01; 源码参考基于Android 13 aosp&#xff01; 一. Android VSync模块开胃菜 在开始正式的分析之前&#xff0c;我们先简单对Android的Vsync模块简单介绍下,如下图所示&#xff0c;其中: HW_VSync是…

qt把虚拟键盘部署到arm开发板上(imx6ull)

分为了qt官方配置的虚拟键盘以及各路大神自己开源的第三方键盘&#xff0c;我本来想尝试利用官方键盘结果一直失败&#xff0c;最后放弃了&#xff0c;后面我用的第三方键盘参考了如下文章&#xff1a; https://blog.csdn.net/2301_76250105/article/details/136441243 https…

qq音乐sign逆向

qq音乐sign参数逆向 1.概览 参数sign长度40 多次调试发现&#xff0c;前缀zzb不变 2.打日志 跟站发现是vpm&#xff0c;在apply调用打上日志断点&#xff1a; 连蒙带猜知道&#xff0c;最终字符串四部分构成&#xff0c;zzb 24DC2798 HI0TvE4tOMqzN4w88oZCjQ EE0A88FE 1.把…

gpt-4o继续迭代考场安排程序 一键生成考场清单

接上两篇gpt-4o考场安排-CSDN博客&#xff0c;考场分层次安排&#xff0c;最终exe版-CSDN博客 当然你也可以只看这一篇。 今天又添加了以下功能&#xff0c;程序见后。 1、自动分页&#xff0c;每个考场打印一页 2、添加了打印试场单页眉 3、添加了页脚 第X页&#xff0c;…