ElasticSearch 数据聚合与运算
1、数据聚合
聚合(aggregations)可以让我们极其方便的实现数据的统计、分析和运算。实现这些统计功能的比数据库的 SQL 要方便的多,而且查询速度非常快,可以实现近实时搜索效果。
注意: 参加聚合的字段必须是 keyword、日期、数值和布尔类型
1.1 聚合的种类
常见的聚合类型:
1.1.1 桶聚合(Bucket):对文档分组,类似 MySQL的 group by 功能
| 类型 | 描述 |
|---|---|
| TermAggregation | 按照文档字段值分组,如:品牌分组 |
| Date Histogram | 按照日期阶梯分组,如:按月分组 |
1.1.2 度量聚合(Metric):值计算,如:最大值、最小值、平均值等等
| 类型 | 描述 |
|---|---|
| Avg | 求平均值 |
| Max | 求最大值 |
| Min | 求最小值 |
| Stats | 同时求max、min、avg、sum等 |
1.1.3 管道聚合(pipeline): 对已聚合的结果为基础做聚合
1.2 聚合示例测试1
需求:从所有酒店数据中,查询酒店金额不大于300的所有酒店品牌的种类,并按照品牌的数量进行逆序排序,筛选出前5个数量最多的品牌。
分析:① 限制酒店金额 ② 根据酒店的品牌做聚合(Bucket)查询 ③ 逆序排序
1.2.1 定义 DSL 语法
GET /hotel/_search
{"query": {"range": {"price": {"lte": 300}}},"size": 0,"aggs": {"brandAggs": {"terms": {"field": "brand","size": 5,"order": {"_count": "desc"}}}}
}
1.2.2 参数说明
- size: 设置为0,结果中不需要包含文档,只返回聚合结果
- aggs:定义聚合,固定值
- brandAgg:聚合名称,自定义语义化即可
- terms: 聚合类型,brand 是一个 keyword 类型的字符串,所以用 terms
- field:参与聚合的字段
- size:希望获取的聚合结果数量
- order:指定排序,按照 _count 逆序排序
- brandAgg:聚合名称,自定义语义化即可
1.2.3 测试结果

1.3 聚合示例测试2
需求: 对酒店的品牌分组,并计算每个品牌的用户评分的最大值、最小值和平均值等,并按照酒店评分的平均值逆序排序
分析:① 对品牌进行桶(Bucket)聚合 ② 对桶聚合的结果进行(Metric)聚合运算
1.3.1 定义 DSL 语法
GET /hotel/_search
{"size": 0,"aggs": {"brandAgg": {"terms": {"field": "brand","size": 10,"order": {"scoreAgg.avg": "desc"}},"aggs": {"scoreAgg": {"stats": {"field": "score"}}}}}
}
1.3.2 参数说明
- size: 设置为0,结果中不需要包含文档,只返回聚合结果
- aggs:定义聚合,固定值
- brandAgg:聚合名称,自定义语义化即可
- terms: 聚合类型,brand 是一个 keyword 类型的字符串,所以用 terms
- field:参与聚合的字段
- size:希望获取的聚合结果数量
- order:指定排序,这里按照 “scoreAgg.avg” 逆序排序
- terms: 聚合类型,brand 是一个 keyword 类型的字符串,所以用 terms
- aggs:对 brandAggs 的子聚合,也就是说多聚合后的结果分别计算,固定值
- scoreAgg:聚合名称,自定义语义化即可
- stats:Metric 聚合计算,这里的 stats 可以计算 min、max、avg、sum的值
- field:聚合字段
- scoreAgg:聚合名称,自定义语义化即可
- brandAgg:聚合名称,自定义语义化即可
1.3.3 测试结果

1.4 聚合示例测试3
需求:对酒店的品牌分组,累加品牌评分,按累计评分逆序排序,筛选出前5名,计算每个品牌评分占总评分的比率
分析:① 对品牌进行桶(Bucket)聚合 ② 对桶聚合的结果进行(Metric)聚合运算 ③ 聚合计算(Pipeline)④ 逻辑运算
1.4.1 定义 DSL 语法
GET /hotel/_search
{"size": 0,"aggs": {"brandAgg": {"terms": {"field": "brand","size": 5,"order": {"singleBrandTotalScore": "desc"}},"aggs": {"singleBrandTotalScore": {"sum": {"field": "score"}}}},"allBrandTotalScore": {"sum_bucket": {"buckets_path": "brandAgg>singleBrandTotalScore"}}}
}
1.4.2 参数说明
- size: 设置为0,结果中不需要包含文档,只返回聚合结果
- aggs:定义聚合,固定值
-
brandAgg:聚合名称,自定义语义化即可
- terms: 聚合类型,brand 是一个 keyword 类型的字符串,所以用 terms
- field:参与聚合的字段
- size:希望获取的聚合结果数量
- order:指定排序,这里按照 “singleBrandTotalScore.value” 逆序排序,sum 聚合运算 value 可省略
- terms: 聚合类型,brand 是一个 keyword 类型的字符串,所以用 terms
-
aggs:对 brandAggs 的子聚合,也就是说多聚合后的结果分别计算,固定值
- singleBrandTotalScore: 多单一品牌的所有评分进行累加
- sum: 对 score 字段求和
- singleBrandTotalScore: 多单一品牌的所有评分进行累加
-
allBrandTotalScore:聚合名称,自定义语义化即可,每个品牌的得分总和再次求和,以获得所有品牌的总得分
- sum_bucket: 管道聚合
- buckets_path:指定了数据来源路径,即来自brandAgg聚合中 singleBrandTotalScore 的结果
- sum_bucket: 管道聚合
-
1.4.3 测试结果

1.4.4 说明:是否可以直接将 allBrandTotalScore 计算值,传入 aggs 中直接参与计算还有待探索,若有好的方法,希望留言反馈,感谢!!!

相关文章:
ElasticSearch 数据聚合与运算
1、数据聚合 聚合(aggregations)可以让我们极其方便的实现数据的统计、分析和运算。实现这些统计功能的比数据库的 SQL 要方便的多,而且查询速度非常快,可以实现近实时搜索效果。 注意: 参加聚合的字段必须是 keywor…...
科研学习|论文解读——智能体最新研究进展
从2024-12-13到2024-12-18的45篇文章中精选出5篇优秀的工作分享 Can Modern LLMs Act as Agent Cores in Radiology~Environments? Achieving Collective Welfare in Multi-Agent Reinforcement Learning via Suggestion Sharing A systematic review of norm emergence in …...
面试小札:Java后端闪电五连鞭_8
1. Kafka消息模型及其组成部分 - 消息(Message):是Kafka中最基本的数据单元。消息包含一个键(key)、一个值(value)和一个时间戳(timestamp)。键可以用于对消息进行分区等…...
java error(2)保存时间带时分秒,回显时分秒变成00:00:00
超简单,顺带记录一下 1.入参实体类上使用注释:JsonFormat(pattern “yyyy-MM-dd”) 导致舍弃了 时分秒的部分。 2.数据库字段对应的类型是 date。date就是日期,日期就不带时分秒。 3.返参实体类使用了JsonFormat(pattern “yyyy-MM-dd”) 导…...
计算机毕业设计python+spark+hive动漫推荐系统 漫画推荐系统 漫画分析可视化大屏 漫画爬虫 漫画推荐系统 漫画爬虫 知识图谱 大数据毕设
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
数字IC后端设计实现篇之TSMC 12nm TCD cell(Dummy TCD Cell)应该怎么加?
TSMC 12nm A72项目我们需要按照foundary的要求提前在floorplan阶段加好TCD Cell。这个cell是用来做工艺校准的。这个dummy TCD Cell也可以等后续Calibre 插dummy自动插。但咱们项目要求提前在floorplan阶段就先预先规划好位置。 TSCM12nm 1P9M的metal stack结构图如下图所示。…...
(8)YOLOv6算法基本原理
一、YOLOv6 模型原理 发布日期:2022年6月 作者:美团技术团队 骨干网络:参考了 RepVGG 的设计,将重参数化能力进行补强,增强了模型结构的重参数化能力。使用了深度可分离卷积和跨阶段连接等技术,旨在提升…...
LNMP+discuz论坛
0.准备 文章目录 0.准备1.nginx2.mysql2.1 mysql82.2 mysql5.7 3.php4.测试php访问mysql5.部署 Discuz6.其他 yum源: # 没有wget,用这个 # curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo[rootlocalhost ~]#…...
在linux系统的docker中安装GitLab
一、安装GitLab: 在安装了docker之后就是下载安装GitLab了,在linux系统中输入命令:docker search gitlab就可以看到很多项目,一般安装第一个,它是英文版的,如果英文不好可以安装twang2218/gitlab-ce-zh。 …...
Python面试常见问题及答案12
问题: 请解释Python中的GIL(全局解释器锁)是什么? ○ 答案: GIL是Python解释器中的一种机制,用于确保任何时候只有一个线程在执行Python字节码。这在多线程场景下可能影响性能优化,但对于单线程…...
从0-1开发一个Vue3前端系统页面-9.博客页面布局
本节主要实现了博客首页界面的基本布局并完善了响应式布局,因为完善了响应式布局故对前面的页面布局有所改动,这里会将改动后的源码同步上传。 1.对页面头部的用户信息进行设计和美化 布局设计参考 :通常初级前端的布局会通过多个div划分区域…...
[手机Linux] 六,ubuntu18.04私有网盘(NextCloud)安装
一,LNMP介绍 LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Alibaba/Amazon/Mint/Oracle/Rocky/Alma/Kali/UOS/银河麒麟/openEuler/Anolis OS Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQ…...
白话java设计模式
创建模式 单例模式(Singleton Pattern): 就是一次创建多次使用,它的对象不会重复创建,可以全局来共享状态。 工厂模式(Factory Method Pattern): 可以通过接口来进行实例化创建&a…...
助力 Tuanjie OpenHarmony 开发:如何使用工具包 Hilog 和 SDK Kits Package?
随着团结引擎从 1.0.0 迭代至 1.3.0,越来越多的开发者开始使用团结引擎开发 OpenHarmony 应用。 在开发的过程中,我们也收到了大量反馈,尤其是在日志、堆栈和性能数据方面,这些信息对开发和调试过程至关重要。同时,我…...
NSDT 3DConvert:高效实现大模型文件在线预览与转换
NSDT 3DConvert 作为一个 WebGL 展示平台,能够实现多种模型格式免费在线预览,并支持大于1GB的OBJ、STL、GLTF、点云等模型进行在线查看与交互,这在3D模型展示领域是一个相当强大的功能。 平台特点 多格式支持 NSDT 3DConvert兼容多种3D模型…...
电商数据采集电商,行业数据分析,平台数据获取|稳定的API接口数据
电商数据采集可以通过多种方式完成,其中包括人工采集、使用电商平台提供的API接口、以及利用爬虫技术等自动化工具。以下是一些常用的电商数据采集方法: 人工采集:人工采集主要是通过基本的“复制粘贴”的方式在电商平台上进行数据的收集&am…...
VUE+Node.js+mysq实现响应式个人博客|项目初始化+路由配置+基础组件搭建
Day 1 开发文档:项目初始化与基础架构搭建 一、项目初始化 1. 创建项目 首先,我们使用 Vite 创建一个基于 Vue 3 的项目: # 创建项目 npm create vitelatest my-blog -- --template vue # 这条命令会创建一个名为 my-blog 的新项目&#…...
Python如何正确解决reCaptcha验证码(9)
前言 本文是该专栏的第73篇,后面会持续分享python爬虫干货知识,记得关注。 我们在处理某些国内外平台项目的时候,相信很多同学或多或少都见过,如下图所示的reCaptcha验证码。 而本文,笔者将重点来介绍在实战项目中,遇到上述中的“reCaptcha验证码”,如何正确去处理并解…...
web3跨链预言机协议-BandProtocol
项目简介 Band Protocol 项目最初于 2017年成立并建立在 ETH 之上。后于2020年转移到了 Cosmos 网络上,基于 Cosmos SDK 搭建了一条 Band Chain 。这是一条 oracle-specific chain,主要功能是提供跨链预言机服务。Cosmos生态上第一个,也是目…...
JAVA将集合切分成指定份数(简易)
JAVA将集合切分成指定份数 主要方法 /** * 主要方法* param list 切分的集合* param count 切成的份数* return*/ public static List<List> splitList(List list,int count){if(count <0 ){return Lists.newArrayList();}List<List> result Lists.newArrayL…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
