聚合分析

官方文档https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html

  • 英文为 Aggregation,是 es 除搜索功能为提供的针对 es数据做统计分析的功能
    - 功能丰富,提供Bucket,Metric、Pipeline等多种分析方式,可以满足大部分的分析需求
    - 实时新高,所有的计算结果都是即时返回的,而Hadoop的大数据系统一般都是T+1级别的

聚合分析作为 search的一部分,api如下所示:

  • 请告诉我公司目前在职人员工作岗位的分布情况?

分类

  • 为了比那与理解,es将聚合分析主要分为如下4类
    - Bucket, 分桶类型,类似SQL中的GROUP BY 语法
    - Metric, 指标分析类型,如计算最大值,最小值,平均值等等
    - Pipeline,管道分析类型,基于上一级的聚合分析结果进行再分析
    - Matrix, 矩阵分析类型

Metric

  • 主要分如下两类:
    - 单值分析,只输出一个分析结果
    - min,max,avg,sum
    - cardinality
    - 多值分析,输出多个分析结果
    - stats,extended stats
    - percentile,percentile rank
    - top hits
Min
  • 返回数值类字段的最小值
Max
  • 返回数值类字段的最大值
Avg
  • 返回数值类字段的平均值
Sum
  • 返回数值类型字段的总和

Metric 聚合分析

  • 一次返回多个聚合结果

Cardinality

  • Cardinality,意为集合的势,或者基数,是指不同数值的个数,类似SQL中的distinct count概念

Stats

  • 返回一系列数值类型的统计值,包含min、max、avg、sum和count

Extended Stats

  • 对stats的扩展,包含了更多的统计数据,比如方差,标准差等

Percentile

  • 百分位数统计
    - 百分数 values “1.0”:5150 -> 5150 所占的百分率
    -
  • 百分位数统计
    - 11000,30000所占的比例。

Top Hits

  • 一般用于分桶后获取该桶内最匹配的顶部文档列表,即详情数据

Bucket 聚合分析

  • Bucket,意为桶,即按照一定的规则将文档分配到不同的桶中,达到分类分析的目的
  • 按照Bucket的分桶策略,常见的Bucket聚合分析如下:
    - Terms
    - Range
    - Date Range
    - Histogram
    - Date Histogram

Bucket 聚合分析 - Term

  • 该分桶策略最简单,直接按照term来分桶,如果是text类型,则按照分词后的结果分词

Bucket 聚合分析 - Range

  • 通过指定数值的范围来设定分桶规则

Bucket 聚合分析 - Date Range

  • 通过日期指定日期的范围来设定分桶规则

Bucket 聚合分析 - Historgram

  • 直方图,以固定间隔的策略来分割数据

Bucket 聚合分析 - Date Historgram

  • 针对日期的直方图或者柱状图,是时序数据分析中常用的聚合分析类型

Bucket + Metric 聚合分析

  • Bucket 聚合分析允许通过添加子分析来进一步进行分析,该子分析可以是 Bucket也可以是Metric(可以不断嵌套)。这也使得es的聚合分析能力变得异常强大。

分桶之后再分桶


  • 分桶后进行数据分析

Pipeline 聚合分析

  • 针对聚合分析的结果再次进行聚合分析,而且支持链式调用,可以回答如下问题:
    - 订单月平均销售额是多少?
  • Pipeline 的分析结果会输出到原结果中,根据输出位置的不同,分为以下两类:
    - Parent 结果内嵌到现有的聚合分析结果中
    - Derivative (导数)
    - Moving Average (移动求和)
    - Cumulative Sum (累计求和)
    - Sibling 结果与现有聚合分析结果统计
    - Max/Min/Avg/Sum Bucket
    - Stats/Extended Stats Bucket
    - Percentiles Bucket

Pipeline 聚合分析 Sibling - Min Bucket

Pipeline 聚合分析 Sibling - Max Bucket

  • 找出所有 Bucket中值最大的 Bucket 名称和值

Pipeline 聚合分析 Sibling - Avg Bucket

  • 计算所有 Bucket的平均值

Pipeline 聚合分析 Sibling - Sum Bucket

  • 计算所有 Bucket值的总和

Pipeline 聚合分析 Sibling - Stats Bucket

  • 计算所有 Bucket值的Stats分析

Pipeline 聚合分析 Sibling - Percentiles Bucket

  • 计算所有 Bucket值的百分位数

Pipeline 聚合分析 Parent - Derivative

  • 计算 Bucket值的导数

Pipeline 聚合分析 Parent - Moving Average

  • 计算 Bucket值的移动平均值

Pipeline 聚合分析 Parent - Cumulative Sum

  • 计算 Bucket值的累计加和

作用范围

  • es聚合分析默认作用范围是query的结果集,可以通过如下的方式改变其作用范围:
    - fileter
    - post_filter
    - global
    - aggs 聚合分析值分析query结果的数据

作用范围 - filter

  • 为摸个聚合分析设定过滤条件,从而在不变更整体 query语句的情况下修改了作用范围

作用范围 - post-filter

  • 作用于文档过滤,但在聚合分析后生效

作用范围 - global

  • 无视 query 过滤条件,基于全部文档进行分析

排序

  • 可以使用自带的关键词数据进行排序,比如:
    - _count文档数
    - _key 按照 key 值排序
  • 按照子聚合中的结果排序
    - 先按年龄分桶
    - 在计算每个桶中平均值
    - 按照每个桶的平均值来排序

计算精准度问题

Min 聚合的执行流程


Trems 集合执行流程

Terms 并不永远准确

Terms 不准确的原因

  • 数据分散在多 Shard 上,Coordinating Node 无法得悉数据全貌

Terms 不准确的解决方法

  • 设置 Shard 数为1,消除数据分散的问题,但无法承载大数据量
  • 合理设置 Shard_Size 大小,级每次从 Shard上额外获取数据,以提升准确度
    Shard_Size 大小的设定方法
  • terms 聚合返回结果中有如下两个统计值:
    - doc_count_error_upper_bound 被遗漏 term可能的最大值
    - sum_other_doc_count 返回结果 bucket的 term外其他 term的文档总数
  • 设定 show_term_doc_count_errror可以查看每个 bucket误算的最大值,(每个shard都返回时为0)

    Shard_Size 大小的设定方法
  • term(d)不是每个 shard都有,取其他没有此 term(d)的 shard 中的最小值(如下的 b(2))相加得到show_term_doc_count_errror。 所以每个shard都有term的话(如 term a、 b),将返回为0。
  • Shard_Size 默认大小如下:
    - shard_size = (size * 1.5) + 10
  • 通过调整 Shard_Size的大小减低 show_term_doc_count_errror来提供准确度
    - 增大了整体的计算量,从而降低了相应时间

近似统计算法

  • 在ES的聚合分析中,Cardinality 和 Percentile 分析实验的是近似算法
    - 结果是近似准确的,但不一定精准
    - 可以通过参数的调整时期结果精确,但同时也意为着更多的计算时间和更大的性能消耗

Elasticsearch之聚合分析相关推荐

  1. 4. ElasticSearch——aggregations聚合分析

    聚合提供了从数据中分组和提取数据的能力,最简单的聚合方法大致等于sql group by和sql聚合函数.在ES中,如果有执行搜索返回his()命中结果,并且同时返回聚合结果,把一个响应中的所有his ...

  2. 聚合中返回source_大数据搜索与可视化分析(9)elasticsearch聚合分析Metric Aggregation...

    在上一篇文章中,我们介绍了<大数据搜索与可视化分析(8)kibana入门教程-2-Discover>,本文学习elasticsearch聚合分析,是对<大数据搜索与可视化分析(3)e ...

  3. 搜索引擎(Elasticsearch聚合分析)

    2019独角兽企业重金招聘Python工程师标准>>> 学习目标 掌握聚合分析的查询语法. 掌握指标聚合.桶聚合的用法 聚合分析简介 ES聚合分析是什么? 聚合分析是数据库中重要的功 ...

  4. ElasticSearch聚合分析

    聚合用于分析查询结果集的统计指标,我们以观看日志分析为例,介绍各种常用的ElasticSearch聚合操作. 目录: 查询用户观看视频数和观看时长 聚合分页器 查询视频uv 单个视频uv 批量查询视频 ...

  5. ElasticSearch实现商品搜索与聚合分析

    ElasticSearch实现商品搜索与聚合分析 Gitee地址:https://gitee.com/yuyuuyuy/micro-mall 文章目录 ElasticSearch实现商品搜索与聚合分析 ...

  6. Elasticsearch聚合分析Java Client

    本文基于Elasticsearch7.x 本文将上篇Elasticsearch聚合分析Rest API里的实例转化为Java Client Bucket Aggregation Bucket Aggr ...

  7. Elasticsearch简单搜索以及聚合分析

    1.批量索引文档 如果你有大量文档要索引,你能通过批量 API(bulk API) 来批量提交它们.批量文档操作比单独提交请求显著更快,因为它极简了网络往返. 最佳的批量数量取决于许多因素:文档的大小 ...

  8. Elasticsearch 分页查询聚合分析

    分页查询 关于 Elasticsearch 分页查询,这几个问题经常被问到 问题1:想请问下,一次性获取索引上的某个字段的所有值(100 万左右),除了把 max_result_window 调大 , ...

  9. ElasticSearch聚合分析API

    前言 说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提取统计指标时变得游刃有余.同样的工作,你在 ...

最新文章

  1. 算法:快速排序实现 定制比较函数
  2. Java算法(两数之和)
  3. java500主键为空,java – JPA主键值始终为0
  4. Makefile使用规则
  5. python3源码剖析_T-SNE源码剖析(python版)
  6. html5 ie10支持,ie10支不支持html5|Internet Explorer10完美支持HTML5_好特教程
  7. File存对象--android 的File存储到SD卡();
  8. navicate连接mysql问题(#1130 - Host 'localhost' is not allowed to connect to this MySQL server)
  9. [转载] Java中自定义异常的声明与处理
  10. 分治算法——在真币中找出伪币
  11. 华为系列设备优先级总结(一)
  12. 分享一款国外的优化IE9浏览器的软件感觉很好用兼容win7
  13. 用友NC安装教程、用友NC65安装教程、用友NC57安装教程、NC安装教程、NC65授权教程
  14. matlab非牛顿流体,可用于常见非牛顿流体的数值模拟方法与流程
  15. linux相关rpm包下载地址
  16. 使用 busybox 为 龙芯2f 创建 文件系统
  17. Android8.1 MTK平台 WLAN热点定制
  18. 【STM32】5分钟了解STM32的串口通信
  19. Windows Installer:正在安装其他程序。请等待该安装完成,然后再次尝试安装此软件
  20. 通达信经典实用选股公式

热门文章

  1. 从固定到保护 一起来了解儿童安全座椅的前世今生
  2. 《Unity 3.x游戏开发实例》——2.11节《Artillery Live!》
  3. OSGI:简述对OSGI的认识
  4. QUESTED S7R 两分频有源监听音箱评测
  5. [技巧篇] 如何在不会的情况下解释 Python 设置文件的缓冲的问题
  6. Easyexcel写操作
  7. NPN和PNP三极管做开关电路使用方式速记
  8. 【C4AI-2022】基于可见光与激光雷达数据融合的航天器三维精细结构智能重建
  9. Cisco.Packet.Tracer思科模拟器中路由交换基础命令
  10. 百度地图如何创建一个属于自己的地图,附加到项目中?