7 Elasticsearch 篇之聚合分析入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingdianone/article/details/86611509

聚合分析简介

什么是聚合分析

·搜索引擎用来回答如下问题:

  • 请告诉我地址为上海的所有订单?
  • 请告诉我最近1天内创建但没有付款的所有订单?

.聚合分析可以回答如下问题:

  • 请告诉我最近1周每天的订单成交量有多少?
  • 请告诉我最近1个月每天的平均订单金额是多少?
  • 请告诉我最近半年卖的最火的前5个商品是哪些?

·聚合分析,英文为Aggregation ,是es除搜索功能外提供的针对es数据做统计分析的功能

  • 功能丰富,提供Bucket, Metric, Pipeline等多种分析方式,可以满足大部分的分析需求
  • 实时性高,所有的计算结果都是即时返回的,而hadoop等大数据系统一般都是 T+1级别的

请告诉我公司目前在职人员工作岗位的分布情况?
在这里插入图片描述
在这里插入图片描述
聚合分析作为search的一部分, api如下所示:
在这里插入图片描述
请告诉我公司目前在职人员工作岗位的分布情况?
在这里插入图片描述

聚合分析-分类

·为了便于理解, es将聚合分析主要分为如下4类

  • Bucket,分桶类型,类似SOL中的GROUP BY语法
  • Metric,指标分析类型,如计算最大值、最小值、平均值等等
  • Pipeline ,管道分析类型,基于上一级的聚合分析结果进行再分析
  • Matrix ,矩阵分析类型

metric聚合分析

主要分如下两类:

  • 单值分析,只输出一个分析结果
    • min,max,avg,sum
    • cardinality
  • 多值分析,输出多个分析结果
    • stats,extended stats
    • percentile, percentile rank
    • top hits

返回数值类字段的最小值
在这里插入图片描述
返回数值字段的最大值
在这里插入图片描述
一次返回多个聚合结果
在这里插入图片描述

Metric聚合分析-Cardinality

Cardinality ,意为集合的势,或者基数,是指不同数值的个数,类似SQL中的distinct count概念
在这里插入图片描述

Metric聚合分析-Stats

返回一系列数值类型的统计值,包含min, max, avg, sum和count
在这里插入图片描述

Metric聚合分析-Percentile

百分位数统计:
在这里插入图片描述

Metric聚合分析-Percentile Rank

百分位数统计:
在这里插入图片描述

Metric聚合分析-Top Hits

一般用于分桶后获取该桶内最匹配的顶部文档列表,即详情数据
在这里插入图片描述

bucket聚合分析

Bucket ,意为桶,即按照一定的规则将文档分配到不同的桶中,达到分类分析的目的
在这里插入图片描述
按照Bucket的分桶策略,常见的Bucket聚合分析如下:

  • Terms
  • Range
  • Date Range
  • Histogram
  • Date Histogram

bucket聚合分析-Terms

该分桶策略最简单,直接按照term来分桶,如果是text类型,则按照分词后的结果分桶
在这里插入图片描述

bucket聚合分析- Range

通过指定数值的范围来设定分桶规则
在这里插入图片描述

bucket聚合分析- Date Range

一通过指定日期的范围来设定分桶规则
在这里插入图片描述

bucket聚合分析- Histogram

直方图,以固定间隔的策略来分割数据
在这里插入图片描述

bucket聚合分析- Date Histogram

针对日期的直方图或者柱状图,是时序数据分析中常用的聚合分析类型
在这里插入图片描述

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

找出所有Bucket中值最小的Bucket名称和值:
在这里插入图片描述
计算Bucket值得导数:
在这里插入图片描述
计算Bucket值得移动平均值:
在这里插入图片描述

作用范围

es聚合分析默认作用范围是query的结果集,可以通过如下的方式改变其作用范围:

  • filter
  • post_filter
  • global

在这里插入图片描述

作用范围-filter

为某个聚合分析设定过滤条件,从而在不更改整体query语句的情况下修改了作用范围
在这里插入图片描述

作用范围-post_filter

作用于文档过滤,但在聚合分析后生效
在这里插入图片描述

作用范围-global

无视query过滤条件,基于全部文档进行分析
在这里插入图片描述

排序

可以使用自带的关键数据进行排序,比如:

  • _count文档数
  • _key按照key值排序
    在这里插入图片描述
    在这里插入图片描述

原理与精准度问题

Min聚合得执行流程

在这里插入图片描述

Terms聚合的执行流程

在这里插入图片描述
Terms并不永远准确
在这里插入图片描述
数据分散在多Shard上, Coordinating Node无法得悉数据全貌;所以不准确。

Terms不准确的解决办法

  • 设置Shard数为1,消除数据分散的问题,但无法承载大数据量
  • 合理设置Shard Size大小,即每次从Shard上额外多获取数据,以提升准确度
    在这里插入图片描述

Shard_Size大小的设定方法

terms聚合返回结果中有如下两个统计值:

  • doc_count_error_upper_bound被遗漏的term可能的最大值
  • sum_other_other_doc_count返回结果bucket的term外其他term的文档总数
    在这里插入图片描述
    在这里插入图片描述
    设定show_term_doc_count_error可以查看每个bucket误算的最大值
    在这里插入图片描述
    在这里插入图片描述

Shard Size默认大小如下:

  • shard size = (size x 1.5) +10

通过调整Shard Size的大小降低doc_count_error_upper_bound来提升准确度

  • 增大了整体的计算量,从而降低了响应时间

近似统计计算

在这里插入图片描述
在ES的聚合分析中, Cardinality和Percentile分析使用的是近似统计算法

  • 结果是近似准确的,但不一定精准
  • 可以通过参数的调整使其结果精准,但同时也意味着更多的计算时间和更大的性能消耗

猜你喜欢

转载自blog.csdn.net/bingdianone/article/details/86611509
今日推荐