【基础篇】第5章 Elasticsearch 数据聚合与分析
在Elasticsearch的庞大功能体系中,数据聚合与分析扮演着至关重要的角色,它使我们能够从海量数据中提炼出有价值的信息,为决策提供依据。本章将深入探讨Elasticsearch的聚合功能,从基本概念到常见类型的实践,让你掌握如何高效地对数据进行分组、计数、统计和分析。
5.1 聚合简介
Elasticsearch的聚合功能允许用户对索引中的数据进行汇总和分析,它不仅仅是简单的计数或求和,而是涵盖了从基本统计到复杂数据分布分析的全方位能力。聚合操作通过在搜索请求中定义,可以在一次查询中同时返回搜索结果和聚合结果,极大地增强了数据探索的灵活性和效率。
5.2 常用聚合类型
Elasticsearch提供的聚合功能非常丰富,能够满足多种数据分析需求。以下是对几种常用聚合类型的详细说明,包括它们的工作原理、适用场景以及具体案例,帮助读者更好地理解和应用这些强大的数据处理工具。
5.2.1 Terms聚合
概念: terms聚合是最基础也是最常用的聚合类型,它根据指定字段的值进行分组,每个唯一的值对应一个桶(bucket),并统计每个桶内文档的数量。这种聚合非常适合进行分类统计,比如统计网站上不同类别的文章数量。
案例:
假设有一个博客文章索引,我们想统计每个作者的文章数量。
GET blog_posts/_search
{"size": 0,"aggs": {"authors": {"terms": {"field": "author.keyword","size": 10}}}
}
结果示例:
{"aggregations": {"authors": {"buckets": [{"key": "Alice", "doc_count": 35},{"key": "Bob", "doc_count": 22},{"key": "Charlie", "doc_count": 18},...]}}
}
5.2.2 Histogram聚合
概念: histogram聚合将数值型字段的值域分割成多个区间(桶),每个区间代表一个范围,然后统计落入每个区间内的文档数量。它适用于分析数值数据的分布情况,比如分析商品价格的分布。
案例:
分析商品价格区间内的销售分布,以100元为间隔。
GET sales/_search
{"aggs": {"price_histogram": {"histogram": {"field": "price","interval": 100}}}
}
结果示例:
{"aggregations": {"price_histogram": {"buckets": [{"key": 0, "doc_count": 50},{"key": 100, "doc_count": 30},{"key": 200, "doc_count": 20},...]}}
}
5.2.3 Date Histogram聚合
概念: date_histogram聚合与histogram相似,但专用于日期字段,按时间间隔(如天、周、月等)分组,用于分析时间序列数据。例如,分析网站每天的访问量。
案例:
分析每天的访问记录数量。
GET website_logs/_search
{"aggs": {"visits_per_day": {"date_histogram": {"field": "access_date","calendar_interval": "day"}}}
}
结果示例:
{"aggregations": {"visits_per_day": {"buckets": [{"key_as_string": "2023-04-01T00:00:00.000Z", "key": 1680230400000, "doc_count": 235},{"key_as_string": "2023-04-02T00:00:00.000Z", "key": 1680316800000, "doc_count": 250},...]}}
}
5.2.4 Metrics聚合
概念: 指标聚合用于计算单个数值指标,如平均值(avg)、最大值(max)、最小值(min)、总和(sum)等。它可以单独使用,但更多时候作为桶聚合内的子聚合,对每个桶中的数据进行进一步的数值分析。
案例:
在每个作者的文章数量统计基础上,进一步计算每个作者文章的平均评分。
GET blog_posts/_search
{"size": 0,"aggs": {"authors": {"terms": {"field": "author.keyword","size": 10},"aggs": {"average_rating": {"avg": {"field": "rating"}}}}}
}
结果示例:
{"aggregations": {"authors": {"buckets": [{"key": "Alice", "doc_count": 35, "average_rating": {"value": 4.2}},{"key": "Bob", "doc_count": 22, "average_rating": {"value": 3.8}},...]}}
}
通过这些案例,我们可以看到Elasticsearch的聚合功能不仅强大而且灵活,能够满足多样化的数据分析需求。掌握这些常用聚合类型及其应用场景,是进行高效数据探索和分析的重要基础。
5.3 桶与指标聚合
Elasticsearch的聚合功能之所以强大,很大程度上得益于其灵活的桶聚合(Bucket Aggregations)和指标聚合(Metric Aggregations)机制。这两种聚合类型相辅相成,共同构成了复杂数据分析的基础。本节将更深入地探讨这两类聚合的工作原理、相互作用方式以及在实际应用中的高级用法。
5.3.1 桶聚合(Bucket Aggregations)的深入解析
桶聚合,顾名思义,是将数据划分到不同的“桶”中,每个桶代表一个数据范围或类别。它的核心作用是将数据分组,为后续的分析提供结构框架。主要的桶聚合类型包括terms、histogram、date_histogram等,前面已有介绍。更进一步地,桶聚合还可以嵌套,形成层级结构,使得数据细分和分析更为精细。
高级用法:
- 嵌套桶聚合:通过在桶内嵌套其他桶聚合,可以实现多维度的数据分析。例如,在按月份统计销售量的同时,还可以按产品类别细分,即在
date_histogram桶内嵌套一个terms桶。 - 复合桶聚合:如
range聚合,根据数值字段的范围划分桶,特别适用于价格区间分析等场景。 - Missing桶:用于捕捉缺失值,单独分析没有特定字段数据的文档。
5.3.2 指标聚合(Metric Aggregations)的深化应用
指标聚合用于计算每个桶内文档的数值型指标,如平均值、总和、最大值、最小值等。它通常与桶聚合结合使用,为每个分组提供量化分析结果。主要的指标聚合类型有avg、sum、min、max、cardinality(唯一值计数)等。
高级用法:
- 多指标聚合:在同一个桶内可以定义多个指标聚合,一次性获取多个统计指标,如同时计算每个类别的平均销售额和销售笔数。
- Pipeline聚合:这是一种特殊的指标聚合,它允许使用先前桶或指标聚合的结果进行进一步的计算,如计算百分比变化、移动平均等。这为复杂数据分析提供了强大的支持。
- Top Hits聚合:在每个桶内返回最相关的文档,这对于分析每个分组的代表性文档非常有用。
5.3.3 桶与指标聚合的协同工作
桶聚合与指标聚合的结合使用是Elasticsearch数据分析的核心所在。桶聚合负责数据的分组,为每个组创建一个上下文;指标聚合则在此上下文中进行数值计算,提供每个分组的统计信息。这种结构化的方法使得用户能够从宏观到微观,层层深入地探索数据。
小结
通过本章的学习,我们不仅认识到了Elasticsearch聚合功能的重要性,还深入探讨了多种常用聚合类型及其应用场景。桶聚合与指标聚合的结合使用,为我们提供了强大的数据分组和统计能力,是进行数据分析和报告制作的有力工具。掌握了这些基础,你将能够更加自信地面对数据海洋,从中挖掘出宝贵的信息宝藏。接下来的旅程,【高级篇】第6章《高级查询与搜索优化》,将带领大家探索更高级的查询技术与性能优化策略,进一步提升Elasticsearch的使用效能。
相关文章:
【基础篇】第5章 Elasticsearch 数据聚合与分析
在Elasticsearch的庞大功能体系中,数据聚合与分析扮演着至关重要的角色,它使我们能够从海量数据中提炼出有价值的信息,为决策提供依据。本章将深入探讨Elasticsearch的聚合功能,从基本概念到常见类型的实践,让你掌握如…...
【网络安全】修改Host文件实现域名解析
场景 开发一个网站或者服务,需要在本地测试时,可以将线上的域名指向本地开发环境的IP地址。从而模拟真实环境中的域名访问,方便调试和开发。 步骤 1、以管理员身份打开命令提示符 2、编辑hosts文件: 输入以下命令打开hosts文…...
Spring Boot 全面解析:从入门到实践案例
引言: Spring Boot 是由 Pivotal 团队提供的全新框架,旨在简化 Spring 应用的初始搭建以及开发过程。它基于 Spring 平台,通过“约定优于配置”的原则,尽可能自动化配置,减少XML配置,使得开发者能够快速启…...
222222222
2222222...
Boost 智能指针
scoped_ptr 不能被复制或赋值给其他 scoped_ptr 对象,不能与其他指针比较 (除了 nullptr) scoped_ptr 用例 template <typename T> class scoped_ptr { public:// 构造函数:初始化 scoped_ptr 并接管指针的所有权explicit scoped_ptr(T* ptr n…...
在WSL Ubuntu中启用root用户的SSH服务
在 Ubuntu 中,默认情况下 root 用户是禁用 SSH 登录的,这是为了增加系统安全性。 一、修改配置 找到 PermitRootLogin 行:在文件中找到 PermitRootLogin 配置项。默认情况下,它通常被设置为 PermitRootLogin prohibit-password 或…...
C语⾔数据类型和变量
C语⾔数据类型和变量 1.数据类型介绍1.1 字符型1.2 整型1.3 浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof操作符1.5.2 数据类型长度1.5.3 sizeof中表达式不计算 2. signed 和 unsigned3. 数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5. 算术操作符&#…...
运行时类型信息(RTTI)
在计算机编程中,运行时类型信息(Runtime Type Information,简称RTTI)或运行时类型标识(Runtime Type Identification)是某些编程语言(如C++、Object Pascal、Ada)的一个特性,它允许在程序运行时获取对象的数据类型信息。RTTI可以用于所有类型,也只能用于显式启用RTTI…...
使用 NVivo 定性数据分析软件指导癌症护理研究
您是否曾因进行全面文献综述所需的大量研究而感到不知所措?在比较和整理大量冗长的出版物时,您是否不知道从哪里开始?幸运的是,这正是定性研究专家 Heidi Rishel Brakey 硕士擅长的领域,我们将在本案例研究中介绍这一点…...
R语言 | 使用ggplot绘制柱状图,在柱子中显示数值和显著性
原文链接:使用ggplot绘制柱状图,在柱子中显示数值和显著性 本期教程 获得本期教程示例数据,后台回复关键词:20240628。(PS:在社群中,可获得往期和未来教程所有数据和代码) 往期教程…...
第十四届蓝桥杯省赛C++B组D题【飞机降落】题解(AC)
解题思路 这道题目要求我们判断给定的飞机是否都能在它们的油料耗尽之前降落。为了寻找是否存在合法的降落序列,我们可以使用深度优先搜索(DFS)的方法,尝试所有可能的降落顺序。 首先,我们需要理解题目中的条件。每架…...
容器化spring boot应用程序
容器化spring boot应用程序有多种方式,如基于简单的Dockerfile,多阶段Dockerfile以及基于Docker Compose等,我们将逐步给大家介绍,本节主要介绍基于简单的Dockerfile进行容器化spring boot的应用程序。 创建Spring boot应用程序 …...
掌握智慧校园:资产来源功能解析
在智慧校园的资产管理框架下,资产来源管理是确保资产数据完整性和合规性的重要一环。这一功能通过数字化手段,详尽记录每一项资产从何而来,无论是采购、捐赠、内部调拨,还是自制与改造,均需经过严格记录与追踪…...
基于公有云部署wordpress
云平台选择 腾讯云 阿里云 华为云 项目部署 一、架构讲解 1.1、定义与组成 LNMP是Linux、Nginx、MySQL(或MariaDB)和PHP(或Perl、Python)的首字母缩写,代表在Linux系统下使用Nginx作为Web服务器,MySQL作为…...
vite+vue集成cesium
1、创建项目、选择框架vuejs pnpm create vite demo_cesium 2、进入项目安装依赖 cd demo_cesium pnpm install3、安装cesium及插件 3、pnpm i cesium vite-plugin-cesium 4、修改vite-config.js import { defineConfig } from vite import vue from vitejs/plugin-vue impo…...
2024 年江西省研究生数学建模竞赛A题:交通信号灯管理问题分析、实现代码及参考论文
2024 年江西省研究生数学建模竞赛题目交通信号灯管理 1 题目 交通信号灯是指挥车辆通行的重要标志,由红灯、绿灯、 黄灯组成。红灯停、绿灯行,而黄灯则起到警示作用。交通 信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。 一…...
华为机试HJ1字符串最后一个单词的长度
华为机试HJ1字符串最后一个单词的长度 题目: 计算字符串中最后一个单词的长度 想法: 利用空格将字符串中的单词进行切分,返回最后一个单词的长度 input_str input() # 字符串输入 result input_str.split(" ")[-1] # 选取…...
排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)
欢迎来到我的Blog,点击关注哦💕 前言 排序是一种基本的数据处理操作,它涉及将一系列项目重新排列,以便按照指定的标准(通常是数值大小)进行排序。在C语言中,排序算法是用来对元素进行排序的一系…...
(2024)docker-compose实战 (6)部署前端项目(react, vue)
前言 本次仅使用nginx搭建单一的前端项目, 前端项目可以是html, react, vue.项目目录中需要携带nginx的配置文件(conf/default.conf).前端文件直接拷贝到项目目录中即可.如果不确定镜像的配置文件目录, 可以通过 docker inspect 镜像名 来查看具体的配置信息.使用docker-compos…...
python 中的 下划线_ 是啥意思
在 Python 中,_(下划线)通常用作占位符,表示一个变量名,但程序中不会实际使用这个变量的值。 目录 忽略循环变量:忽略函数返回值:在解释器中使用:举例子1. 忽略循环变量2. 忽略不需…...
芯片原型开发实战指南:从虚拟原型到FPGA的决策与调试
1. 原型决策前的核心考量:一份来自一线的深度清单在硬件和系统设计领域,原型开发是连接构想与现实的桥梁,但这座桥怎么搭、用什么材料、何时能通车,每一步都充满了抉择。很多团队在项目启动时,满腔热情地喊着“先做个原…...
代码骨架生成器:从原理到实践,打造高效项目脚手架
1. 项目概述:从零到一的代码骨架生成器在软件开发领域,尤其是团队协作或个人快速启动新项目时,我们常常会陷入一种重复性的“仪式感”中:创建项目目录结构、初始化版本控制、配置构建工具、设置代码规范、编写基础配置文件……这些…...
别让求解器‘装傻’:COMSOL中‘事件接口’的隐藏用法与常见坑点
别让求解器‘装傻’:COMSOL中‘事件接口’的隐藏用法与常见坑点 在瞬态耦合仿真中,你是否遇到过这样的场景:电磁场脉冲已经结束,但温度场仍在缓慢爬升;或者结构载荷突然释放,但求解器却将突变平滑处理&…...
百度首页网页图片更多当AI开始写测试用例,手工测试工程师的护城河在哪里?
一、 第一道护城河:从“用例执行者”到“策略设计者”AI可以基于需求文档和历史数据,瞬间生成海量测试用例。但它无法回答一个根本性的问题:我们究竟应该测试什么?测试策略的设计,是在有限的时间和资源下,对…...
深度解析:libiec61850开源库如何解决电力系统通信的三大核心挑战
深度解析:libiec61850开源库如何解决电力系统通信的三大核心挑战 【免费下载链接】libiec61850 Official repository for libIEC61850, the open-source library for the IEC 61850 protocols 项目地址: https://gitcode.com/gh_mirrors/li/libiec61850 在电…...
嵌入式处理器IP选型指南:从ARM到RISC-V的权衡与实战
1. 从一场早餐会聊起:为什么32位处理器IP依然是嵌入式开发的硬通货最近在整理资料时,翻到一篇十多年前的老新闻,说的是IP供应商CAST要在DesignCon 2012上办一场免费的早餐研讨会,主题是他们新推出的BA22 32位处理器IP核。新闻里笔…...
Jira、ONES、ClickUp 对比:哪款研发管理软件更适合中国研发团队?
快速迭代的互联网和软件行业,研发团队的效率管理工具几乎决定了产品交付的速度与质量。研发管理软件不仅是“任务分派”的工具,更是团队 需求管理、版本迭代、缺陷跟踪、研发效能度量 的基础设施。 目前市面上主流的研发管理软件众多,不同工…...
NPC逆变器模糊超螺旋滑模控制【附仿真】
✨ 长期致力于NPC型逆变器、滑模控制、超螺旋算法、模糊控制、电能质量优化研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)改进型超螺旋滑模变结构控…...
亚马逊Sidewalk技术解析:智能家居网络共享的隐私与安全挑战
1. 项目概述:当你的智能音箱开始“共享”你的网络 去年年底,我像往常一样检查家里的智能设备,一个偶然的发现让我停下了手里的咖啡:我家的几台亚马逊Echo智能音箱,在未经我明确同意的情况下,已经被默认开启…...
ARM GICv3虚拟中断控制器与ICH_LR寄存器详解
1. ARM GICv3虚拟中断控制器架构概述 在现代计算机系统中,中断控制器是管理硬件中断的核心组件。ARM架构的通用中断控制器(Generic Interrupt Controller,GIC)经过多代演进,GICv3版本引入了对虚拟化的全面支持。虚拟化…...
