51_ElasticSearch 基于doc value正排索引的聚合内部原理
更多干货
- 分布式实战(干货)
- spring cloud 实战(干货)
- mybatis 实战(干货)
- spring boot 实战(干货)
- React 入门实战(干货)
- 构建中小型互联网企业架构(干货)
- python 学习持续更新
- ElasticSearch 笔记
一、概述
- 聚合分析的内部原理是什么?
- aggs,term,metric avg max,执行一个聚合操作的时候,内部原理是怎样的呢?
- 用了什么样的数据结构去执行聚合?
- 是不是用的倒排索引?
二、例子
搜索+聚合,写个示例。搜索 品牌为苹果手机,按照颜色聚合。(苹果手机,每种颜色的台数)
GET /test_index/test_type/_search
{
"query": {
"match": {
"search_field": "苹果"
}
},
"aggs": {
"group_by_agg_field": {
"terms": {
"field": "agg_field"
}
}
}
}
1. 采用倒排索引来进行聚合操作
纯用倒排索引来实现的弊端,性能是很低下
- es不是纯用倒排索引来实现搜索 + 聚合。
- 性能是很低下的原因在与聚合,聚合的时候需要遍历下面例子中所有的颜色
- 需要遍历所有的倒排索引才能实现聚合
1、实现搜索出苹果。在品牌的倒排索引中搜索。找到是苹果的倒排索引就停止。搜索不需要遍历整个倒排索引效率高
苹果 - 第一台 第二台
小米 - 第三台 第四台
2、 进行聚合
颜色的倒排索引中搜索。要获得所有颜色的话,就需要遍历所有的倒排索引
红色 - 第一台
蓝色 - 第二台
红色 - 第三台
蓝色 - 第四台
2. 倒排索引+正排索引来实现
实现搜索出苹果
苹果 - 第一台 第二台
小米 - 第三台 第四台
进行聚合,只要根据搜索结果依次在正排索引中搜索。并做聚合操作
第一台 - 红色
第二台 - 蓝色
第三台 - 红色
第四台 - 蓝色
苹果 --> 第一台,第二台 -> 红色、蓝色