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实现并行聚合。

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

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

相关文章

Ubuntu 磁盘修复

Ubuntu 磁盘修复 在 ubuntu 文件系统变成只读模式,该处理呢? 文件系统内部的错误,如索引错误、元数据损坏等,也可能导致系统进入只读状态。磁盘坏道或硬件故障也可能引发文件系统只读的问题。/etc/fstab配置错误,可能…

重新整理机器学习和神经网络框架

本篇重新梳理了人工智能(AI)、机器学习(ML)、神经网络(NN)和深度学习(DL)之间存在一定的包含关系,以下是它们的关系及各自内容,以及人工智能领域中深度学习分支对比整理。…

LabVIEW瞬变电磁接收系统

利用LabVIEW软件与USB4432采集卡开发瞬变电磁接收系统。系统通过改进硬件配置与软件编程,解决了传统仪器在信噪比低和抗干扰能力差的问题,实现了高精度的数据采集和处理,特别适用于地质勘探等领域。 ​ 项目背景: 瞬变电磁法是探…

Redis 优化秒杀(异步秒杀)

目录 为什么需要异步秒杀 异步优化的核心逻辑是什么? 阻塞队列的特点是什么? Lua脚本在这里的作用是什么? 异步调用创建订单的具体逻辑是什么? 为什么要用代理对象proxy调用createVoucherOrder方法? 对于代码的详细…

C++笔记之`size_t`辨析

C++笔记之size_t辨析 code review! 文章目录 C++笔记之`size_t`辨析一.什么是 `size_t`?二.`size_t` 的来源和设计目的三.`size_t` 的应用场景四.`size_t` 的优点五.`size_t` 的缺点和注意事项六.`size_t` 和其他类型的比较七.总结与建议在 C/C++ 中,size_t 是一个非常重要的…

MySQL表的增删查改(下)——Update(更新),Delete(删除)

文章目录 Update将孙悟空同学的数学成绩修改为80分将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分将总成绩倒数前三的 3 位同学的数学成绩加上 30 分将所有同学的语文成绩更新为原来的 2 倍 Delete删除数据删除孙悟空同学的考试成绩删除整张表数据 截断表…

大语言模型训练的数据集从哪里来?

继续上篇文章的内容说说大语言模型预训练的数据集从哪里来以及为什么互联网上的数据已经被耗尽这个说法并不专业,再谈谈大语言模型预训练数据集的优化思路。 1. GPT2使用的数据集是WebText,该数据集大概40GB,由OpenAI创建,主要内…

【hadoop学习遇见的小问题】clone克隆完之后网络连接不上问题解决

vi /etc/udev/rules.d/70-persistent-net.rules注释掉第一行 第二行的eth1 改为eth0 由上图也可以看到物理地址 记录下来在网卡中修改物理地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0修改完之后 重启reboot 即可

Spring Boot中的依赖注入是如何工作

Spring Boot 中的依赖注入(Dependency Injection,简称 DI)是通过 Spring 框架的核心机制——控制反转(Inversion of Control,IOC)容器来实现的。Spring Boot 基于 Spring Framework,在应用中自动…

PDFMathTranslate: Star13.8k,一款基于AI的PDF文档全文双语翻译PDF文档全文双语翻译,保留格式神器,你应该需要它

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 PDFMathTranslate是一个开源项目,旨在为用户提供便捷的PDF科学论文翻译解决方案。它不仅能够翻译文本,还能保留公式、图表、目…

对话|全年HUD前装将超330万台,疆程技术瞄准人机交互“第一屏”

2024年,在高阶智驾进入快速上车的同时,座舱人机交互也在迎来新的增长点。Chat GPT、AR-HUD、车载投影等新配置都在带来新增量机会。 高工智能汽车研究院监测数据显示,2024年1-10月,中国市场(不含进出口)乘用…

【机器学习案列】学生抑郁可视化及预测分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

python【数据结构】

1. 列表 Python 中列表是可变的,这是它区别于字符串和元组的最重要的特点;即,列表可以修改,而字符串和元组不能。 以下是 Python 中列表的方法: 方法描述list.append(x)把一个元素添加到列表的结尾,相当…

Linux 智能化系统

智能化家庭温度控制系统 树莓派(Raspberry Pi):这是一个小型的、基于 Linux 的计算机开发板。它可以作为智能家居系统的核心控制单元。 温度传感器(DHT11):用于测量环境温度。这种传感器价格便宜&#xf…

STM32 拓展 RTC案例1:使用闹钟唤醒待机模式 (HAL库)

需求描述 执行完毕正常代码之后,让MCU进入待机模式,设置闹钟,自动让MCU从待机模式中被唤醒。可以用led点亮熄灭显示是否唤醒。 应用场景:比如设计一个野外温度自动采集的设备,规定每小时采集一次温度,就可…

微服务保护——Sentinel

什么是微服务保护? 微服务保护是一系列用于保障微服务架构稳定、可靠运行的策略与技术手段,在复杂的分布式微服务系统里,它能避免局部故障引发连锁反应,从而维持整个系统的可用性,主要涵盖以下几个关键部分&#xff1a…

[python3]Excel解析库-xlutils

xlutils 是一组用于处理 Excel 文件的 Python 库,它实际上是 xlrd 和 xlwt 的扩展,提供了额外的功能来操作 Excel 文件。xlutils 主要由三个部分组成:xlutils.copy、xlutils.filter 和 xlutils.view,它们分别用于复制和修改现有 E…

C# 值类型和引用类型详解

简介 在 C# 中,值类型和引用类型是两个基础的数据类型类别,它们的主要区别在于 存储位置 和 赋值方式。 值类型 值类型存储的是数据本身,分配在 栈 (Stack) 中。当一个值类型变量被赋值给另一个变量时,会复制值。 值类型的特点…

福建双色荷花提取颜色

提取指定颜色 HSV双色荷花代码验证 参照《OpenCV图像处理技术》 HSV 要用HSV的色调、饱和度和亮度来提取指定颜色。 双色荷花 农林大学金山校区观音湖 代码 import cv2 import numpy as npimgcv2.imread("./sucai6/hua.jpg") cv2.imshow("SRC",img) h…

利用Python爬虫获取API接口:探索数据的力量

引言 在当今数字化时代,数据已成为企业、研究机构和个人获取信息、洞察趋势和做出决策的重要资源。Python爬虫作为一种高效的数据采集工具,能够帮助我们自动化地从互联网上获取大量的数据。而API接口作为数据获取的重要途径之一,为我们提供了…