重生之我们在ES顶端相遇第12 章 - 聚合运算

devtools/2024/9/20 3:52:17/ 标签: elasticsearch

文章目录

      • 前言
      • 桶聚合
        • filters aggregation
        • term aggregation
          • 基本用法
          • 配置选项
          • 子聚合
          • 注意事项
      • 指标聚合

前言

ES 聚合运算在面向 C 端的日常开发中,比较少碰到。在面向公司内部,或者数据报表的开发中可能会碰到。

ES 聚合运算主要分为三大类:

  1. 桶聚合(Bucket aggregations)
  2. 指标聚合(Metrics aggregations)
  3. 管道聚合(Pipeline aggregations)

因为管道聚合开发中实在没碰到过,本篇章就不介绍了。

桶聚合

桶聚合允许你根据一个或多个维度对数据进行分组。

ES 桶聚合有非常多的用法,这里挑出开发中相对常用的进行介绍。更多内容需要到 ES 桶聚合官网查阅

filters aggregation

多桶聚合,其中每个桶包含与查询匹配的文档。

例如查询 type=A,type=B 的 score 平均值

POST test10/_bulk
{"index": {}}
{"type":"A","score":12,"pid":13}
{"index": {}}
{"type":"A","score":42,"pid":13}
{"index": {}}
{"type":"A","score":55,"pid":12}
{"index": {}}
{"type":"B","score":14,"pid":13}
{"index": {}}
{"type":"B","score":1213,"pid":13}
{"index": {}}
{"type":"B","score":324,"pid":12}
GET  test10/_search
{"size": 0, "query": {"term": {"pid": {"value": 13}}},"aggs": {"my_filters": {"filters": {"filters": {"a_type": {"term": {"type.keyword": "A"}},"b_type": {"term": {"type.keyword": "B"}}}},"aggs": {"avg_score": {"avg": {"field": "score"}}}}}
}
term aggregation

term聚合(terms aggregation)是一种对数据进行分组的聚合操作,它基于一个字段的所有不同值(通常是关键词字段)来对数据进行分组。每个唯一的值都会成为一个“桶”(bucket),并且可以对这些桶进行各种统计分析,比如计数、求和、平均值等。

注:统计值只是一个预估值,非准确值。

基本用法

下面是一个基本的term聚合的例子,它展示了如何在products索引中根据category字段的不同值来聚合文档,并计算每个类别的文档数量:

POST /products/_search
{"size": 0, "aggs": {"categories": {"terms": {"field": "category.keyword"}}}
}

在这个例子中,size设置为0是因为我们只对聚合结果感兴趣,不需要返回任何文档。aggs字段定义了聚合操作,其中 categories 是我们给这个聚合操作起的名字,terms指定了我们想要进行的聚合类型,field指定了我们想要聚合的字段。

配置选项

term聚合有一些重要的配置选项:

  • field:指定要聚合的字段。
  • size:指定返回的桶的数量。默认是10,可以设置一个更大的数字来返回更多的桶。
  • shard_size:在分片级别上设置桶的数量,这通常比size大,因为每个分片会先收集桶,然后减少到size指定的数量。
  • min_doc_count:指定每个桶至少需要包含的文档数量。如果设置为1,那么即使某个关键词只出现了一次也会被包含在结果中。
  • order:指定桶的排序方式。可以按照_count(默认,按桶中的文档数量降序排序,不应该使用升序排序)、_term(按词条字典顺序排序)或者自定义脚本等方式排序。
子聚合

term聚合可以包含子聚合,这意味着你可以在每个桶的基础上进一步进行聚合。例如,你可以先按category字段聚合,然后在每个类别内部按price字段进行统计分析:

POST /products/_search
{"size": 0, "aggs": {"categories": {"terms": {"field": "category.keyword","size": 10},"aggs": {"average_price": {"avg": {"field": "price"}}}}}
}

在这个例子中,categories聚合下的average_price子聚合会计算每个类别的平均价格。

注意事项
  • term聚合通常用于keyword类型的字段,因为这些字段是全文本的,不会进行分词。
  • 对于文本字段,你可能需要先将文本字段的分词结果聚合起来,然后再进行term聚合。
  • 大量的唯一值可能会导致大量的桶,这可能会消耗大量的内存和网络带宽,因此需要合理设置sizeshard_size

指标聚合

指标聚合一般是用于对某一个字段进行算术运算。例如:求均值、求和、求最大值、求最小值、求文档数。
本篇只会选择其中一个介绍,其他内容大差不差。更详细信息请自行阅读 ES 指标聚合官网

求所有指标

GET test10/_search
{"size": 0, "aggs": {"my_stat": {"stats": {"field": "score"}}}
}

返回

{......"aggregations" : {"my_stat" : {"count" : 6,"min" : 12.0,"max" : 1213.0,"avg" : 276.6666666666667,"sum" : 1660.0}}
}

http://www.ppmy.cn/devtools/108845.html

相关文章

数学基础 -- 统计学之零均值化

零均值化及其在数据处理中的应用 什么是零均值化? 零均值化(也称为中心化)是数据预处理中的一个常见步骤,目的是将数据的均值调整为零。通过零均值化,可以标准化数据的尺度,使得后续的算法(如…

Spark-push-based shuffle

一、上下文 《Spark-Task启动流程》中讲到如果一个Task是一个ShuffleMapTask,那么最后在调用ShuffleWriter写入磁盘后还会判断是否可以启用push-based shuffle机制,下面我们就来继续看看push-based shuffle机制背后都做了什么 二、push-based shuffle机…

【深入理解SpringCloud微服务】深入理解nacos配置中心(三)——服务端启动与获取配置源码分析

【深入理解SpringCloud微服务】深入理解nacos配置中心(三)——服务端启动与获取配置源码分析 原理回顾服务端启动获取配置 源码分析服务端启动ExternalDumpService#init()ConfigCacheService#dump() 获取配置 原理回顾 服务端启动 我们在《宏观理解nac…

3.比 HTTP 更安全的 HTTPS(工作原理理解、非对称加密理解、证书理解)

所谓的协议 协议只是一种规则,你不按规则来就无法和目标方进行你的工作 协议说白了只是人定的规则,任何人都可以定协议 我们不需要太了解细节,这些制定和完善协议的人去做的,我们只需要知道协议的一个大概 HTTPS 协议 1、概述…

PPPoE配置学习笔记

企业内网和运营商网络如上图所示,中间交换机模拟运营商传输设备。公网IP段:12.1.1.0/24。内网IP段:192.168.1.0/24。PPPoE拨号采用CHAP认证,用户名:admin 密码:admin123 实验要求: 将R1设置为…

探究零工市场小程序如何改变传统兼职模式

近年来,零工市场小程序正逐渐改变传统的兼职模式,为求职者和雇主提供了一个更为高效、便捷的平台。本文将深入探讨零工市场小程序如何影响传统兼职模式,以及它带来的优势和挑战。 一、背景与挑战 传统的兼职市场往往存在信息不对称的问题&am…

SQL COUNT() 函数深入解析

SQL COUNT() 函数深入解析 SQL(Structured Query Language)是一种用于管理关系数据库管理系统(RDBMS)的标准编程语言。在SQL中,COUNT() 函数是一个常用的聚合函数,用于计算数据表中的行数或特定列的值数量…

PMP–冲刺–十大领域易考点三大项目流程敏捷中的角色职责与3个工件高频考点考试技巧–名词解析版

文章目录 技巧PMBOK易考点--题干关键词一、引论二、项目运行环境三、项目经理的角色四、整合管理五、范围管理六、进度管理七、成本管理八、质量管理九、资源管理十、沟通管理十一、风险管理十二、采购管理十三、干系人管理 考试中的三大项目流程一 、变更流程二 、风险流程三 …

如何保护服务器免受恶意软件攻击?

了解如何保护服务器免受恶意软件的侵害一直是管理员关注的问题。各种恶意软件带来的威胁已经存在了几十年,早在 1949 年的一篇关于自我复制计算机程序的理论科学论文中就对其进行了讨论。自 20 世纪 70 年代初的实验性病毒以来,恶意软件一直是一种不断发…

八、Maven总结

1.为什么要学习Maven? 2.Maven 也可以配华为云和腾讯云等。 3.IDEA整合Maven 4.IDEA基于Maven进行工程的构建 5.基于Maven进行依赖管理(重点) 6. Maven的依赖传递和依赖冲突 7. Maven工程继承和聚合 8.仓库及查找顺序

【2024数模国赛赛题思路公开】国赛C题第二套思路丨附可运行代码丨无偿自提

2024年国赛C题第二套解题思路 第一问:2024~2030年农作物的最优种植方案 【问题分析】 题目要求为某乡村在2024~2030年制定农作物的最优种植方案,目的是最大化收益,并需考虑两种销售情况: 1. 超过预期销售量的部分滞销&#xff0…

【MacOS】mac定位服务中删除已经卸载的软件

mac定位服务中删除已经卸载的软件 网上的帖子真不靠谱 直接右键 WeTypeSettings ,查找位置,丢废纸篓即可!会提示你卸载的!

未来出行:高效智能的汽车充电桩

解析高效智能的汽车充电桩的结构设计技术要求 充电桩按照充电方式分为交流充电桩与直流充电桩、交直流一体充电桩三种。直流充电桩一般安装在高速公路,充电站等地;交流充电桩一般安装在小区、停车场、道路停车位、高速公路服务区等位置。根据国网Q/GDW4…

【爬虫软件】小红薯评论区采集工具

一、采集目标与应用场景 您好!我利用Python技术自主研发了一款高效的爬虫软件,批量收集小红薯平台上的评论,包括主评论及其下的二级评论。 为了拓宽用户群体,让不具备编程基础的小白用户也能轻松上手,我开发成了界面…

spring中添加@Test注解测试

1、添加maven依赖 <!-- 添加test方便测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><grou…

TCP/IP协议栈详解及其在现代网络中的应用

在当今数字化时代&#xff0c;网络已成为我们生活中不可或缺的一部分。无论是社交、工作还是娱乐&#xff0c;网络都在背后发挥着至关重要的作用。而这一切的实现&#xff0c;都离不开TCP/IP协议栈。本文将详细介绍TCP/IP协议栈的结构、各层功能以及它在现代网络中的应用。 什…

http和https区别

HTTP&#xff08;超文本传输协议&#xff09;和 HTTPS&#xff08;安全超文本传输协议&#xff09;是用于在互联网上传输数据的协议。它们之间的主要区别在于安全性&#xff1a; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;: 加密: HTTP 不对传输的数据进行加密&…

数学建模强化宝典(8)粒子群算法

前言 粒子群算法&#xff08;Particle Swarm Optimization, PSO&#xff09;是一种基于群体智能的优化算法&#xff0c;它源于对鸟群捕食行为的研究。通过模拟鸟群中的个体相互协作和信息共享来寻找最优解&#xff0c;粒子群算法已被广泛应用于函数优化、神经网络训练、模糊系统…

Matlab simulink建模与仿真 第七章(表查询库)

参考视频&#xff1a;simulink1.1simulink简介_哔哩哔哩_bilibili 一、表查询库中的模块概览 二、表查询模块 使用Lookup Table表查询模块&#xff0c;需要在配置窗口中建立x-y&#xff08;自变量-因变量&#xff09;离散数据对&#xff0c;x与y的维数应相同&#xff0c;x集&a…

使用debugfs

在前面,我们学习到了sysctl这一基于sysfs和seq_file这一基于procfs文件系统进行交互数据的方式,其中procfs主要是针对进程属性,而sysfs是针对内核模型的,为了保证其稳健,我们很少拿来作为调试时数据交换使用,显然printk也满足不了,那么debugfs就应运而生了。一般发行版系…