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 逆序排序
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” 逆序排序
    • aggs:对 brandAggs 的子聚合,也就是说多聚合后的结果分别计算,固定值
      • scoreAgg:聚合名称,自定义语义化即可
        • stats:Metric 聚合计算,这里的 stats 可以计算 min、max、avg、sum的值
        • field:聚合字段
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 可省略
    • aggs:对 brandAggs 的子聚合,也就是说多聚合后的结果分别计算,固定值

      • singleBrandTotalScore: 多单一品牌的所有评分进行累加
        • sum: 对 score 字段求和
    • allBrandTotalScore:聚合名称,自定义语义化即可,每个品牌的得分总和再次求和,以获得所有品牌的总得分

      • sum_bucket: 管道聚合
        • buckets_path:指定了数据来源路径,即来自brandAgg聚合中 singleBrandTotalScore 的结果
1.4.3 测试结果

在这里插入图片描述

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

F5中获取客户端ip地址(client ip)

当F5设备对其原始设置上的所有IP地址使用NAT时,连接到poo成员(nodes、backend servers)的出站连接将是NAT IP地址。 pool 成员(nodes、backend servers)将无法看到真实的客户端 ip地址,因为看到的是F5上的…

MATLAB引用矩阵元素的几种方法

引用矩阵元素可以通过索引,也可以通过逻辑值 索引 通过引用元素在矩阵中的位置来提取元素,例如: - 逻辑值 通过某种逻辑运算来使得要提取的值变为逻辑 1 1 1,用 A ( ) A() A()提取即可, A A A为原矩阵的名称。 例如&…

机器学习预处理-表格数据的空值处理

机器学习预处理-表格数据的空值处理 机器学习预处理-表格数据的分析与可视化中详细介绍了表格数据的python可视化,可视化能够帮助我们了解数据的构成和分布,是我们进行机器学习的必备步骤。上文中也提及,原始的数据存在部分的缺失&#xff0…

了解 SpringMVC 请求流程

文章目录 1. Spring 基础 - SpringMVC 请求流程1.1 引入1.2 什么是 MVC1.3 什么是 Spring MVC1.4 请求流程核心架构的具体流程步骤补充 1.5 案例**Maven 包引入****业务代码的编写**DaoServiceControllerwebapp 下的 web.xmlspringmvc.xmlJSP 视图 2. Spring 进阶 - Dispatcher…

Springboot3.x配置类(Configuration)和单元测试

配置类在Spring Boot框架中扮演着关键角色,它使开发者能够利用Java代码定义Bean、设定属性及调整其他Spring相关设置,取代了早期版本中依赖的XML配置文件。 集中化管理:借助Configuration注解,Spring Boot让用户能在一个或几个配…

鸿道Intewell-C纯实时构型,适合有功能安全认证需求的工业操作系统

鸿道Intewell-C纯实时构型,适合有功能安全认证需求的工业操作系统 鸿道Intewell-C是一款工业实时微内核操作系统,由科东软件自主研发,具有超低延迟和最小抖动,保障工业设备可以高效处理时间敏感的现场业务,支持多种工…

Stream– ESP8266物联网应用,(客户端向服务器发送数据信息 客户端向服务器请求数据信息)

Stream– ESP8266物联网应用 Stream对于ESP8266-Arduino语言来说指的是数据序列。请留意:在C编程中Stream常被翻译作“流”。我们认为将Stream称为数据序列更加直观。因为数据序列这一概念有两个很关键特点。 第一个特点是“序”,即数据序列不能是杂乱…

芯品荟|SWM221系列芯片之TFTLCD彩屏显示及控制

“革新未来,智驭控制新纪元”,由广东华芯微特集成电路有限公司市场总监张琢,对SWM221系列的强大功能表现进行了整体介绍。 确实,华芯微特在TFTLCD显示及控制有十多年应用基础和积累的团队,仍勇于挑战,自我…

MIT S6081 2024 Lab 1 | Operating System | Notes

目录 安装与下载 实验1 开始我们的实验 sleep(简单) pingpong(简单) primes (中等)/(困难) find(中等) xargs(中等) finally Reference I. Tools Debian 或 Ubuntu Arch…

华为认证HCIA——数据传输形式,数据封装的基本概念

前言: 整理下学习笔记,打好基础,daydayup!!! 对网络概念有基本理解后(华为认证HCIA——网络基本概念),开始进一步学习数据传输。 数据传输的形式 数据传输主要有三种形式: 1,电路传…

opencv小练习(未完成版)

读取一张彩色图像并将其转换为灰度图。 import cv2# 读取图片 img cv2.imread("./duck.png") img cv2.resize(img, dsizeNone, fx0.4, fy0.4, interpolationcv2.INTER_LINEAR) # 读取一张灰度图 img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 展示图片 cv2.im…

WSL (Windows Subsystem for Linux)

文章目录 Windows下使用Linux的三种方式:1.WSL(1)安装WSL(2)初始化Linux系统(3)安装、创建、激活 Python虚拟环境 2.虚拟机3.Docker Windows下使用Linux的三种方式: 1.WSL 是最简单的在 Windows 上运行 Linux 环境的方式,适用于日常开发和命…

金融分析-Transformer模型(基础理论)

Transformer模型 1.基本原理 transformer的core是注意力机制,其本质就是编码器-解码器。他可以通过多个编码器进行编码,再把编码完的结果输出给解码器进行解码,然后得到最终的output。 1.1编码器 数据在编码器中会经过一个self-attention的…

【一本通】两个数的最小公倍数

【一本通】两个数的最小公倍数 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 输入两个正整数,编程计算两个数的最小公倍数。 输入 两个整数 输出 最小公倍数 样例输入 12 18样例输出 …

D 咖智能饮品机器人:开启商业新篇

在科技迅猛发展的当下,智能机器人正逐步渗透到各个商业领域,D 咖智能饮品机器人便是其中的佼佼者,它的出现为饮品行业带来全新的发展契机,有望开启商业新篇。 从大环境来看,消费者对于饮品的需求日益多元化和个性化。他…

35. Three.js案例-创建带阴影的球体与平面

35. Three.js案例-创建带阴影的球体与平面 实现效果 知识点 WebGLRenderer WebGLRenderer 是Three.js中用于渲染场景的主要类之一,它负责将场景中的对象渲染到画布上。 构造器 new THREE.WebGLRenderer(parameters : Object) 参数类型描述parametersObject可选…

leetcode212. 单词搜索 II

给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words, 返回所有二维网格上的单词 。 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一…

容器化技术

文章目录 虚拟化容器容器隔离实现隔离文件 chroot隔离访问 namespace隔离资源 cgroups Dockerkubernetes 虚拟化容器 容器的首要目标是让软件分发部署过程从传统的发布安装包、靠人工部署转变为直接发布已经部署好的、包含整套运行环境的虚拟计划镜像。 一个计算机软件能够给正…

【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析

目录 一、前言 二、Spring Boot 简介 三、Spring Boot 核心模块 四、Spring Boot 项目实战:构建一个简单的 RESTful API 1. 创建 Spring Boot 项目 2. 配置数据库 3. 创建实体类 4. 创建 JPA 仓库接口 5. 创建服务层 6. 创建控制器层 7. 测试 API 8. 运…

土地档案管理关系[源码+文档]

目录 摘 要 Abstract 1 绪论 1.1 可行性研究编写目的 1.2 项目背景 1.3 土地管理现状 1.4 土地档案管理研究方向 1.5 项目目标 1.6 项目设计原则 1.6.1 实用性原则 1.6.2 经济性原则 1.6.3 合法性原则 2 相关技术介绍 2.1 三层架构的选择 2.2 编程…