Elasticsearch:聚合操作

这里写目录标题

  • 一、聚合的概述
  • 二、聚合的分类
    • 1、指标聚合(Metric Aggregation)
    • 2、桶聚合(Bucket Aggregation)
    • 3、管道聚合(Pipeline Aggregation)
  • 三、ES聚合分析不精准原因分析
  • 四、聚合性能优化
    • 1、ES聚合不精确的解决方案
    • 2、ES聚合性能优化
      • (1)插入数据时对索引进行预排序
      • (2)适用节点查询缓存
      • (3)适用分片请求缓存
      • (4)拆分聚合,使聚合并行化

一、聚合的概述

聚合(aggregations)可以让我们及其方便的实现对数据的统计、分析、运算。例如:

  • 什么品牌的手机最受欢迎
  • 这些手机的平均价格、最高价格、最低价格
  • 这些手机每月的销售情况如何

使用场景

  • 电商平台的销售分析。
  • 社交媒体的用户行为分析。
  • 物流企业的运输分析。
  • 金融企业的交易分析。
  • 只能家具设备监控分析。

二、聚合的分类

1、指标聚合(Metric Aggregation)

  • 单值分析:只输出一个分析结果
    • min、max、avg、sum。
    • Cardinality(类似distinct Count)。
  • 多值分析:输出多个分析结果
  • stats(统计),extended stats。
  • percentile(百分位),percentile rank。
  • top hits(排在前面的示例)。

2、桶聚合(Bucket Aggregation)

按照一定的规则,将文档分配到不同的通中,从而达到分类的目的。ES提供的一些常见Bucket Aggregation。

  • Terms,需要字段支持fielddata

    • keyword默认支持fielddata
    • text需要在Mapping中开启fielddata,会按照分词后的结果进行分桶。
  • 数字类型

    • Range / Data Range。
    • Histogram(直方图) / Date Histogram。
  • 支持嵌套:也就在桶里再做分桶。

3、管道聚合(Pipeline Aggregation)

支持对聚合分析的结果,再次进行聚合分析。Pipeline的分析结果会输出到原结果中,根据位置的不同,分为两类:

  • Sibling - 结果和现有分析结果同级
    • Max,min, Avg&Sum Bucket
    • Stats, Extended status Bucket
    • Percentiles Bucket
  • Parent - 结果内嵌到现有的聚合分析结果之中
    • Derivative(求导)
    • Cumultive Sum(累计求和)
    • Moving Function(移动平均值)

三、ES聚合分析不精准原因分析

Elasticsearch在对海量数据进行聚合分析的时候损失搜索的精准度来满足实时性的需求。
在这里插入图片描述

四、聚合性能优化

1、ES聚合不精确的解决方案

  • 方案一:设置主分片为1。
    适用场景:数据量小的小集群规模业务场景。
  • 方案二:调大shard_size值。
    设置shard_size比较大的值,官方推荐:size*1.5+10。shard_size值越大,结果越趋于精准聚合结果值。此外,还可以通过show_term_doc_count_error参数显示最差情况下的错误值,用于辅助确定shard_size大小。
    • size:是聚合结果的返回值,客户期望返回聚合排名前三,size值就是3.
    • shard_size:每个分片上聚合的数据条数。shard_size原则上要大于等于size。
      适用场景:数据量大,分片数多的集群业务场景。
  • 方案三:将size设置为全量值,来解决精度问题。
    将size设置为2的32次方减去1也就是分片支持的最大值,来解决精度问题。
    原因:1.x版本,size等于0代表全部,高版本取消0值,所以设置了最大值(大于业务的全量值)。
    全量带来的弊端就是:如果分片数量极大,这样做会消耗巨大的CPU资源来排序,而且可能会阻塞网络。

适用场景:对聚合精准度要求极高的业务场景,由于性能问题,不推荐使用。

  • 方案四:使用clickhouse / spark进行精准聚合。
    适用场景:数据量非常大,聚合精准度要求高、响应速度快的业务场景。

2、ES聚合性能优化

(1)插入数据时对索引进行预排序

  • index sorting(索引排序)可用于在插入时对索引进行预排序,而不是在查询时再对索引进行排序,这将提高范围查询(range query)和排序操作的性能。
  • 在Elasticsearch中创建新索引时,可以配置如何对每个分片内的段进行排序。

注意:预排序将增加Elasticsearch写入的成本。在某些用户特定场景下,开启索引排序会导致大约40%~50%的写性能下降。也就是说,如果用户场景更关注写性能的业务,开启索引预排序不是一个很好的选择。

(2)适用节点查询缓存

节点查询缓存(Node query cache)可用于有效缓存过滤器(filter)操作的结果。如果多次执行同一个filter操作,这将很有效,但是即便更改过滤器中的某一个值,也将意味着需要计算新的过滤器结果。

你可以执行一个带有过滤器查询额搜索请求,Elasticsearch将自动尝试使用节点查询缓存来优化性能。例如,如果你想缓存一个基于特定字段值的过滤查询。

(3)适用分片请求缓存

聚合操作中,设置size为0,就会使用分片请求缓存缓存结果。size=0的含义是:只返回聚合结果,不返回查询结果。

(4)拆分聚合,使聚合并行化

Elasticsearch查询条件中同时有多个条件聚合,默认情况下聚合并不是并行运行的。当为每个聚合提供自己的查询并行执行msearch时,性能会有显著提升。因此,在CPU资源不是瓶颈的前提下,如果想缩短响应时间,可以将多个聚合拆分为多个查询,借助:msearch实现并行聚合。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

升级 Spring Boot 3 配置讲解 —— 为何 SpringBoot3 淘汰了 JDK8?

学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕! 随着 Spring Boot 3 的发布,许多开发者发现了一个重要的变化:Spring Boot 3 不再支持 JDK 8。这一变化引发了不少讨论,尤其是对于那些仍然在使用 JDK …

rhcsa练习(3)

1 、创建文件命令练习: ( 1 ) 在 / 目录下创建一个临时目录 test ; mkdir /test ( 2 )在临时目录 test 下创建五个文件,文件名分别为 passwd , group , bashrc &#x…

汽车免拆诊断 | 2007款保时捷Carrera S车行驶中发动机冷却液温度报警灯异常点亮

故障现象 一辆2007款保时捷Carrera S车,搭载3.8 L自然吸气发动机,累计行驶里程约为7.8万km。车主反映,车辆行驶一段距离后,组合仪表上的发动机冷却液温度报警灯异常点亮。为此,在其他维修厂已更换过节温器、发动机冷却…

ffmpeg7.0 aac转pcm

#pragma once #define __STDC_CONSTANT_MACROS #define _CRT_SECURE_NO_WARNINGSextern "C" { #include "libavcodec/avcodec.h" }//缓冲区大小(缓存5帧数据) #define AUDIO_INBUF_SIZE 40960 /*name depthu8 8s16 …

Clisoft SOS设置Server和Project

Clisoft SOS设置Server和Project 一、关于SOS Servers、Clients、Projects和Work Areas 以下三个图是官方文档中介绍的三种情况 图1:带有两个客户端的SOS服务器 图2:使用本地缓存服务器 图3:远程设计团队的缓存服务器 因为SOS软件需要…

Windows 安装 Docker 和 Docker Compose

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

深入理解plt和got表

前言 plt表和got表是和链接过程相关的表。我们知道,一个可执行文件的生成过程需要经过预处理,编译,汇编,链接四个过程。链接又分为静态链接和动态链接。静态链接是发生在程序执行之前,动态链接是发生在程序执行中。 …

深入学习RocketMQ

参考&#xff1a;RocketMQ从从入门到精通_rocketmq入门到精通-CSDN博客 1、消息的类型 普通消息 顺序消息 延时消息 批量消息 事务消息 2、在java中使用 2.1、pom.xml中加入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId…

renben-openstack-使用操作

管理员操作 (1)上传一个qcow2格式的centos7镜像 (2)管理员------>云主机类型------>创建云主机类型 名称&#xff1a;Centos7 VCPU数量&#xff1a;1 内存&#xff1a; 1024 根磁盘&#xff1a; 10G 其他的默认 点击创建云主机类型即可 界面会显示如下 创建公网络 (1)创建…

电脑硬盘系统迁移及问题处理

一、系统迁移准备 1、确认你的电脑主板是否支持安装两块硬盘,如电脑主板有多个M2硬盘接口,我们将新硬盘安装到主板上,原来的老硬盘安装在第二个接口上,主板只有一个M2接口的话可以使用移动硬盘盒。 2、新硬盘安装好后,我们进入原来的系统,在 此电脑–右键–管理–磁盘管…

PySide6-UI界面设计

导论&#xff1a; PySide6和PyQt都是Python对Qt框架的绑定&#xff0c;允许开发者使用Qt创建平台的GUI应用程序。如果你正在开发商业项目&#xff0c;或者需要使用最新的QT6特性&#xff0c;PySide6是一个更好的选择。如果你更倾向于一个成熟的社区和丰富的资源&#xff0c;Py…

ExplaineR:集成K-means聚类算法的SHAP可解释性分析 | 可视化混淆矩阵、决策曲线、模型评估与各类SHAP图

集成K-means聚类算法的SHAP可解释性分析 加载数据集并训练机器学习模型 SHAP 分析以提取特征对预测的影响 通过混淆矩阵可视化模型性能 决策曲线分析 模型评估&#xff08;多指标和ROC曲线的目视检查&#xff09; 带注释阈值的 ROC 曲线 加载 SHAP 结果以进行下游分析 与…

Banshee Stealer新变种正借Apple XProtect加密技术躲避杀毒软件

网络安全研究人员发现了一种针对 macOS 的新型信息窃取恶意软件变种&#xff0c;隐蔽性更强&#xff0c;名为Banshee Stealer。 Check Point Research 在2024 年 9 月底检测到了这一新版本&#xff0c;并在最新的分析报告中表示&#xff1a;2024年底该恶意软件源代码泄露后&…

GoLand下载安装教程

一、goland环境配置 1.下载地址 https://golang.google.cn/dl/ 2.下载安装 3.添加环境变量 4.测试环境变量 输出Hello,World! 说明环境配置成功 二、goland安装 1.下载安装 https://www.jetbrains.com/go/download/download-thanks.html 2.激活使用 SFXUSA86FM-eyJsaWNlbnNl…

C语言:枚举类型

一、枚举类型的声明 枚举顾名思义就是一一列举。我们可以把可能的取值一一列举。比如我们现实生活中&#xff1a; 星期一到星期日是有限的7天&#xff0c;可以一一列举 &#xff1b;性别有&#xff1a;男、女、保密&#xff0c;也可以一一列举 &#xff1b;月份有12个月&#x…

宝塔安装mongodb后,写脚本监控运行状态,关闭后自动重启

最近项目用上了mongodb&#xff0c;但是每天晚上 mongodb都回自动关闭&#xff0c;没办法 只能写个监视服务的脚本 在关闭的话就直接重启&#xff0c;创建个计划任务&#xff0c;每三分钟执行一次 # 检查mongo是否还在进程中 countps aux|grep mongo| grep -v grep |wc -l echo…

蓝桥杯嵌入式速通(1)

1.工程准备 创建一文件夹存放自己的代码&#xff0c;并在mdk中include上文件夹地址 把所有自身代码的头文件都放在headfile头文件中&#xff0c;之后只需要在新的文件中引用headfile即可 headfile中先提前可加入 #include "stdio.h" #include "string.h"…

Apache Hop从入门到精通 第一课 揭开Apache Hop神秘面纱

一、Apache Hop是什么&#xff1f; 1、Apache Hop&#xff0c;简称Hop&#xff0c;全称为Hop Orchestration Platform&#xff0c;即Hop 工作编排平台&#xff0c;是一个数据编排和数据工程平台&#xff0c;旨在促进数据和元数据编排的所有方面。Hop让你专注于你想要解决的问题…

会员制营销与门店业绩提升:以开源AI智能名片S2B2C商城小程序为例的深度剖析

摘要&#xff1a;在数字化时代&#xff0c;会员制营销已成为企业提升门店业绩、增强客户黏性的重要策略。然而&#xff0c;仅仅将会员制营销视为提升业绩的手段&#xff0c;显然过于笼统&#xff0c;缺乏精准性。本文基于“业绩客量客单回头次数”的公式&#xff0c;深入探讨了…

Idea-离线安装SonarLint插件地址

地址&#xff1a; SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..&#xff0c;选中下载好的插件&#xff0c;然后重启idea