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

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 白话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的所有值了,然后就可以执行分组聚合操作了

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

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
数据采集 数据可视化 数据挖掘
多维数据分析:使用Pandas进行复杂的数据操作和聚合
【4月更文挑战第12天】Pandas是Python的强大数据分析库,提供DataFrame数据结构进行多维数据处理。本文介绍了使用Pandas进行多维数据分析的流程:1) 导入数据(如CSV、Excel);2) 数据预处理,包括缺失值处理和类型转换;3) 数据探索,利用describe()、hist()、plot()等进行统计和可视化;4) 数据操作,如筛选、排序和分组;5) 数据聚合,通过groupby()和agg()进行计算。文中还给出了电商数据分析的案例,展示Pandas在实际应用中的价值。
592 2
|
搜索推荐 JavaScript 前端开发
77 网站点击流数据分析案例(原理及意义)
77 网站点击流数据分析案例(原理及意义)
967 0
|
数据挖掘 索引 Python
【Python】数据分析:pandas之布尔索引
【Python】数据分析:pandas之布尔索引
222 0
|
NoSQL 数据挖掘 数据处理
【MongoDB 专栏】MongoDB 聚合管道:数据分析利器
【5月更文挑战第10天】MongoDB的聚合管道是数据分析利器,它通过一系列阶段(如\$match、\$group、\$project等)处理和转换数据,实现过滤、分组、统计等功能。适用于复杂的数据分析任务,能高效处理大量数据并提供实时洞察。在电商、日志和金融等领域有广泛应用。注意索引优化和避免过度聚合,以确保准确性和效率。借助聚合管道,我们可以深入挖掘数据价值,驱动业务发展。
247 3
【MongoDB 专栏】MongoDB 聚合管道:数据分析利器
|
存储 数据可视化 数据挖掘
使用Elasticsearch进行实时数据分析与预测
【8月更文第28天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,它能够实时地存储、检索以及分析大规模的数据集。结合 Logstash 和 Kibana,它们共同构成了 Elastic Stack,这是一套强大的工具组合,适用于收集、存储、分析和可视化数据。
577 0
|
监控 数据可视化 搜索推荐
初识Elasticsearch:打造高效全文搜索与数据分析引擎
【4月更文挑战第7天】Elasticsearch,一款由Elastic公司开发的分布式搜索引擎,以其全文搜索和数据分析能力在全球范围内广泛应用。它基于Apache Lucene,支持JSON,适用于日志分析、监控等领域。Elasticsearch的亮点包括:精准快速的全文搜索,通过倒排索引和分析器实现;强大的数据分析与实时响应能力,提供丰富聚合功能;弹性扩展和高可用性,适应水平扩展和故障恢复;以及完善的生态系统,与Kibana、Logstash等工具集成,支持多种编程语言。作为大数据处理的重要工具,Elasticsearch在企业级搜索和数据分析中扮演关键角色。
419 1
|
存储 自然语言处理 搜索推荐
【Elasticsearch专栏 02】深入探索:Elasticsearch为什么使用倒排索引而不是正排索引
倒排索引在搜索引擎中更受欢迎,因为它直接关联文档内容,支持全文搜索和模糊搜索,提高查询效率。其紧凑的结构减少了存储空间,并方便支持多种查询操作。相比之下,正排索引在搜索效率、存储和灵活性方面存在局限。
121 1
|
算法 数据挖掘
数据分析入门系列教程-EM原理
数据分析入门系列教程-EM原理
152 0
|
存储 算法 数据可视化
数据分析入门系列教程-K-Means原理
数据分析入门系列教程-K-Means原理
166 0

热门文章

最新文章