Elasticsearch4.聚合

本文详细介绍了Elasticsearch的聚合分析,包括Metric、Bucket、Pipeline三种类型,并深入讨论了聚合的作用范围、排序方式以及DocValues和FieldData的区别。特别强调了在分布式环境下,聚合分析的精准度问题和解决方案。

Elasticsearch的分析分为Bucket,Metric,Pipeline三种类型

Metric

在一组文档中对某一个数字型字段进行计算指标值
Metric包含两种单值分析和多值分析

单值分析

只输出一个分析结果
min, max, avg, sum,Cardinality(类似 distinct Count)

多值分析

输出多个分析结果
stats, extended stats,percentile, percentilerank,top hits(排在前面的结果)

Bucket

在这里插入图片描述
按照一定的规则,将文档分配到不同的桶中,从而达到分类的目的
Bucket包括Terms和数字类型(Range/DataRange,Histogram/DateHistogram)

Terms

字段需要打开fielddata,才能进⾏TermsAggregation
Keyword 默认支持 doc_values
Text需要在 Mapping中enable。会按照分词后的结果进行分

Cardinality

类似SQL中的Distinct

Bucket Size & Top Hits

当获取分桶后,桶内最匹配的顶部document列表

Bucket + Metric Aggregation

Bucket 聚合分析允许通过添加子聚合分析来进一步分析,子聚合分析可以是Bucket和Metric

Pipeline

⽀持对聚合分析的结果,再次进行聚合分析,Pipeline分为两种

Sibling

结果和现有分析结果同级
Max,min,Avg&SumBucket,Stats,ExtendedStatusBucket,PercentilesBucket

Parent

结果内嵌到现有的聚合分析结果之中
Derivative(求导),CumultiveSum (累计求和),MovingFunction (滑动窗⼝口)

聚合的作用范围

ES聚合分析的默认作用范围是query的查询结果集,ES也支持以下方式来改变聚合的作用范围
Filter,Post_Filter,Globa

聚合分析的排序

Elasticsearch默认采用相关性算分对结果进行降序排序

DocValues和FieldData
排序的过程

排序是针对字段原始内容进行的。 倒排索引无法发挥作用
需要⽤用到正排索引。通过⽂文档 Id 和字段快速得到字段原始内容
Elasticsearch 有两种实现⽅方法

  • Fielddata
  • DocValues(列式存储,对Text类型无效)
DocValues和FieldData比较

在这里插入图片描述

DocValues

默认启⽤用,可以通过 Mapping 设置关闭
● 增加索引的速度/减少磁盘空间
如果重新打开,需要重建索引
什么时候需要关闭
● 明确不不需要做排序及聚合分析

FieldData

默认关闭,可以通过Mapping设置打开。修改设置后,即时生效,⽆需重建索引
其他字段类型不支持,只支持对Text进行设定
打开后,可以对Text字段进⾏排序。但是是对分词后的term排序,所以,结果往无法满⾜
预期,不建议使用部分情况下打开,满足一些聚合分析的特定需求

聚合分析的精准度问题

在这里插入图片描述
在分布式系统的计算中,没法做到在大数据量的情况下,同时保证精确度和数据量
如果要保证精确度,那么就使用Hadoop
如果要保证实时性,那么可以使用Es

聚合分析的过程

Es的聚合分析是,首先在每个分片上聚合分析,然后在聚合分析多个分片上的数据
在这里插入图片描述

Min聚合分析的执⾏流程

在这里插入图片描述

Terms聚合分析的执⾏流程

在这里插入图片描述

TermsAggregation的返回值

在这里插入图片描述

在TermsAggregation的返回中有两个特殊的数值
doc_count_error_upper_bound:被遗漏的term分桶,包含的⽂档,有可能的最⼤值
sum_other_doc_count:除了返回结果bucket的terms以外,其他terms的⽂档总数(总数-返回的总数)

解决Terms不准的问题

Terms聚合分析不准的原因,数据分散在多个分⽚上,CoordinatingNode⽆法获取数据全貌

解决⽅案1

当数据量不⼤时,设置PrimaryShard为1,实现准确性

解决方案2

在分布式数据上,设置shard_size参数,提⾼精确度
原理:每次从Shard上额外多获取数据,提升准确率
调整shardsize⼤⼩,降低doc_count_error_upper_bound来提升准确度,增加整体计算量,提⾼了准确度,但会降低相应时间,ShardSize默认⼤⼩设定shardsize = size *1.5 +10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值