白话Elasticsearch50-深入聚合数据分析之基于doc values正排索引的聚合内部原理

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 白话Elasticsearch50-深入聚合数据分析之基于doc values正排索引的聚合内部原理

20190806092132811.jpg

概述


继续跟中华石杉老师学习ES,第50篇

课程地址https://www.roncoo.com/view/55


思考

聚合分析的内部原理是什么?当我们使用比如aggs,term,avg 、max等执行一个聚合操作的时候,内部原理是怎样的呢?用了什么样的数据结构去执行聚合?是不是用的倒排索引?


知识点


ES搜索靠倒排索引。 排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values。

ES在建立索引的时候,

  • 一方面会建立倒排索引,以供搜索用
  • 一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用

doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会很高,若内存不足,os会将其写入磁盘。


举例说明

举一个 搜索+聚合 的例子 来理解下 倒排索引和正排索引。

GET /test_index/test_type/_search 
{
  "query": {
    "match": {
      "search_field": "test"
    }
  },
  "aggs": {
    "group_by_agg_field": {
      "terms": {
        "field": "agg_field"
      }
    }
  }
}


那上面的DSL举个例子

假设索引中有3个doc

doc1: hello world test1, test2
doc2: hello test
doc3: world test


那ES建立的倒排索引如下:

hello --->  doc1,doc2
world --->  doc1,doc3
test1 --->  doc1
test2 --->  doc1
test  --->  doc2,doc3


我们的DSL中的查询

"query": {
    "match": {
      "search_field": "test"
    }
  }


查询 “test” ,那么直接从倒排索引中查到对应的结果为doc2,doc3 ,那么搜索就是 doc2,doc3 。


纯用倒排索引来实现的弊端

先回归下,最简单的aggs操作


20190828000025554.png


请求DSL中, "field": "color" ,按照某个字段划分bucket操作,

返回结果是 该field对应的value ,每个value对应一个bucket .

那我们上面的例子中的 aggs呢 ? 假设也是 倒排索引的方式来查找,我们来分析下

agg_field


假设如下N多个doc:

...
...
...
...N多doc 
doc2: agg_field_value_1
doc3: agg_field_value_2


那建立的倒排索引 如下

...
...
...
...
...N多值
agg_field_value_1  doc2
agg_field_value_2  doc3


doc2, doc3, search result --> 实际上,要搜索到doc2的agg_field的值是多少,doc3的agg_field的值是多少


拿到doc2和doc3的agg_field的值之后,就可以根据值进行分组,实现terms bucket操作


doc2的agg_field的值是多少,这个时候,如果你手上只有一个倒排索引,你该怎么办???你要扫描整个倒排索引,去一个一个的搜,拿到每个值,比如说agg_field_value_1 ,看一下,它是不是doc2的值,拿到agg_field_value_2,看一下,是不是doc2的值,直到在倒排索引中找到doc2的agg_field的值。


如果用纯倒排索引去实现聚合,现实不现实啊???性能是很低下的。。。搜索,search,搜倒排索引,搜那个term,就结束了。。。聚合,搜索出了1万个doc,每个doc都要在倒排索引中搜索出它的那个聚合field的值。


倒排索引的话,必须遍历完整个倒排索引才可以。。。。


因为可能你要聚合的那个field的值,是分词的,比如说hello world my name --> 一个doc的聚合field的值可能在倒排索引中对应多个value


所以说,当你在倒排索引中找到一个值,发现它是属于某个doc的时候,还不能停,必须遍历完整个倒排索引,才能说确保找到了每个doc对应的所有terms,然后进行分组聚合


倒排索引+正排索引(doc value)的原理和优势

正排索引 如下:


image.png


1万个doc --> 搜 -> 可能跟搜索到15000次,就搜索完了,就找到了1万个doc的聚合field的所有值了,然后就可以执行分组聚合操作了

石杉老师说的最后一句话 ,我没明白, 为啥不用把正排索引都搜索完呢? 有明白的同仁 指导下 拜托了。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
7月前
|
数据采集 数据可视化 数据挖掘
多维数据分析:使用Pandas进行复杂的数据操作和聚合
【4月更文挑战第12天】Pandas是Python的强大数据分析库,提供DataFrame数据结构进行多维数据处理。本文介绍了使用Pandas进行多维数据分析的流程:1) 导入数据(如CSV、Excel);2) 数据预处理,包括缺失值处理和类型转换;3) 数据探索,利用describe()、hist()、plot()等进行统计和可视化;4) 数据操作,如筛选、排序和分组;5) 数据聚合,通过groupby()和agg()进行计算。文中还给出了电商数据分析的案例,展示Pandas在实际应用中的价值。
312 2
|
4月前
|
存储 数据可视化 数据挖掘
使用Elasticsearch进行实时数据分析与预测
【8月更文第28天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,它能够实时地存储、检索以及分析大规模的数据集。结合 Logstash 和 Kibana,它们共同构成了 Elastic Stack,这是一套强大的工具组合,适用于收集、存储、分析和可视化数据。
181 0
|
5月前
|
存储 数据采集 数据处理
数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南
数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南
203 12
|
6月前
|
存储 缓存 负载均衡
elasticsearch写入流程和请求检索流程原理全方位解析
elasticsearch写入流程和请求检索流程原理全方位解析
|
6月前
|
存储 监控 固态存储
elasticsearch索引生命周期管理(ILM):原理和实践
elasticsearch索引生命周期管理(ILM):原理和实践
|
7月前
|
NoSQL 数据挖掘 数据处理
【MongoDB 专栏】MongoDB 聚合管道:数据分析利器
【5月更文挑战第10天】MongoDB的聚合管道是数据分析利器,它通过一系列阶段(如\$match、\$group、\$project等)处理和转换数据,实现过滤、分组、统计等功能。适用于复杂的数据分析任务,能高效处理大量数据并提供实时洞察。在电商、日志和金融等领域有广泛应用。注意索引优化和避免过度聚合,以确保准确性和效率。借助聚合管道,我们可以深入挖掘数据价值,驱动业务发展。
115 3
【MongoDB 专栏】MongoDB 聚合管道:数据分析利器
|
6月前
|
数据采集 API 定位技术
elasticsearch pipelineI详解:原理与使用
elasticsearch pipelineI详解:原理与使用
|
6月前
|
缓存 自然语言处理 监控
elasticsearch过滤器filter:原理及使用
elasticsearch过滤器filter:原理及使用
|
6月前
|
存储 数据库 开发者
Elasticsearch中的三种分页策略深度解析:原理、使用及对比
Elasticsearch中的三种分页策略深度解析:原理、使用及对比
下一篇
DataWorks