es中索引那些事

这篇具有很好参考价值的文章主要介绍了es中索引那些事。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0、前言

在了解倒排索引之前先理解下索引的作用:

查询数据的时候,最耗时的操作并不是CPU计算,也不是内存聚合,而是去磁盘将文档查到并拉取回来的过程。我们都知道在磁盘IO的过程中,顺序读写效率高于随机读写,磁盘的查找次数也决定最终的响应时间。在使用索引的过程中,我们将数据按照指定方式顺序存放好,然后利用各种数据结构(b树、b+树、倒排索引)等来减少我们查询数据的次数,提高定位和获取数据的效率,这就是索引的作用。

1、什么是倒排索引

简单点说普通索引是key找value,那倒排索引就是value找key。

比如mysql的结构是这样的

id name sex
1 李三

在es倒排索引里是这样的:其中term称为词项,是经过分词器处理后的结果;docId是文档id,根据文档id来获取当前文档的内容。

Term docId
李三 1
1

在ES中将所有的词项通过字典顺序排列好后存储起来,这个数据结构叫词项字典(Term Directory)。实际业务中每一个词项并不只存在一个文档中,而是关联一个文档id的列表,ES中称为Posting List(关联文档ID的列表)。并且ES将词项的前缀(Term Index)拿出,构建了一个FST(相当于Term Directory的index)

es中索引那些事,elasticsearch,elasticsearch,跳表,倒排索引

 因为查索引是磁盘随机IO,而将词项字典抽出来一个词项索引树,放在内存中从而大大增加IO效率。并且词项字典是分区存放,利用公共前缀进行压缩,可以做到更节省空间。

2.联合索引查询

mysql中使用索引查询时,只会使用单一索引进行查询,而es中使用倒排索引查询则是取每个词项中对应的文档list做交集处理。

而es对交集的处理有两种方式:跳表、bitset

什么是跳表

将一个有序链表level0,挑出其中几个元素到level1及level2,每个level越往上,选出来的指针元素越少,查找时依次从高level往低查找。这种链表加多级索引的结构,就叫做跳表

es中索引那些事,elasticsearch,elasticsearch,跳表,倒排索引

 跳表方式

以下取出两个索引的文档id集合,取其交集,如果tab1的跳表如上图所示有一个level1索引,那么取交集过程就为(短找长)

>tab2:2,tab1没有跳过;tab2:24,tab1通过1-18检索没有跳过

->tab2:25, tab1通过1-18-25检索有,id=25存入结果集

->tab2:27, tab1跳过,重复,直到找到37,id=37写入结果集。

如果没有跳表找30这样的元素需要1-3-5-8-18-25-30,而有跳表则只需要1-18-25-30。

Tab1:

1 3 5 8 18 25 30 33 37

Tab2:

2 24 25 27 29 31 33

bitset方式

一个list为[1,3,5,6],另一个为[1,4,6,7]

那么两个list对应的bitset

bit位 1 2 3 4 5 6 7
List1 1 0 1 0 1 1 0
List2 1 0 0 1 0 1 1
List1&List2结果 1 0 0 0 0 1 0

 通过&两个list的bit位可以得到1和6的文档id符合要求,最终返回1、6的文档数据

3.倒排索引结构压缩

倒排索引结构压缩中结构压缩的方式有两种:Frame Of Reference 和 Roaring Bitmap 。

Frame Of Reference

该压缩方式是进行做差压缩存储bit位,来节省存储空间。

例:这样一个PostingList:[1,3,13,101,105,108,255,256,257]

将这个做差后,按bit存:[1,2,10,88,4,3,147,1,1]

然后分到不同的block里面(跳表方式):[1,2,10],[88,4,3],[147,1,1] 

在分到不同的block的同时计算每一个block中数据所占用的最大位数,如第一个block中10是当前block中最大的数据,以最大的数据为基准,算出占用的bit大小,2*3<10<2*4,取4bit。

而这个block中有3个元素,则是3*占用最大的bit=3*4=12bit,/8转换为字节Byte,一个Byte放不下,需要2Byte。

计算出多个block中所占用的总Byte=2+3+3=8Byte,共节省了36-8=28Byte

es中索引那些事,elasticsearch,elasticsearch,跳表,倒排索引

 Roaring Bitmap

根据高16位(2*16=65536)把PostingList切分成不同的block,这时每个block中的每个值最大为65535(2*16-1),16bit占两个Byte。

es中索引那些事,elasticsearch,elasticsearch,跳表,倒排索引

 文章来源地址https://www.toymoban.com/news/detail-520757.html

到了这里,关于es中索引那些事的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES中倒排索引机制

    在ES的倒排索引机制中有四个重要的名词:Term、Term Dictionary、Term Index、Posting List。 Term(词条):词条是索引里面最小的存储和查询单元。一段文本经过分析器分析以后就会输出一串词条。一般来说英文语境中词条是一个单词,中文语境中一个词条是分词后的一个词组。 此处

    2024年02月13日
    浏览(47)
  • ES底层原理之倒排索引

    目录 一、ElasticSearch架构原理 1、ElasticSearch集群的节点类型 2、不可变性 3、写和创建 4、删除和更新 5、利用磁盘缓存实时检索 6、translog提供磁盘控制 二、倒排索引 1、单词----文档矩阵 2、倒排索引 3、倒排索引简单实例 1、ElasticSearch集群的节点类型 Elasticsearch的一个实例是一

    2024年02月06日
    浏览(28)
  • ES入门十一:正排索引和倒排索引

    索引本质上就是一种加快检索数据的存储结构,就像书本的目录一下。 为了更好的理解正排索引和倒排索引,我们借由一个 **唐诗宋词比赛,**这个比赛一共有两个项目: 给定诗词名称,背诵整首 给诗词中几个词语,让你说出带这些词语的诗词。 不难想到,1比较简单,就是

    2024年04月10日
    浏览(67)
  • 【ElasticSearch】ElasticSearch的倒排索引

    什么是ElasticSearch ElasticSearch是一个基于Apache Lucene构建的开源搜索引擎,它提供了强大的全文搜索和分析功能。它不仅可以快速搜索和检索大量的结构化和非结构化数据,还具备水平扩展和高可用性的特性。 1. 弹性搜索和分布式特性 ElasticSearch被设计为分布式的,可以在多个节

    2024年02月10日
    浏览(33)
  • Elasticsearch的倒排索引简介

    Elasticsearch的倒排索引(Inverted Index)是其能够快速执行全文搜索查询的关键技术。为了理解倒排索引的工作原理,我们可以将其与传统的正向索引进行比较。 正向索引(Forward Index) 在正向索引中,索引是以文档为中心构建的。每个文档ID映射到它包含的一系列词汇上。例如

    2024年03月16日
    浏览(41)
  • ElasticSearch简介之倒排索引

    第二点必须准确吧,假如我搜索电脑,结果搜索出来的结果是一些奇奇怪怪的东西,要是在这时候投屏怕不是会陷入社死的尴尬吧。 第三点对于我这种比较粗心的人还是需要有一点的容忍度,哪怕输错其中一个字,也可以给出相关的搜索结果。 第四点对于大部分人而

    2024年04月15日
    浏览(26)
  • Elasticsearch的倒排索引是什么?

    Elasticsearch是基于 Apache Lucene【lusen】的搜索引擎,支持Restful API风格【可以使用常见的HTTP请求来访问】,并且搜索速度很快,可以提供实时的搜索服务。 其实Elasticsearch的功能有很多,比如分布式存储、实时数据分析等很多方面。使用ES的好处有几点: 系统解耦。使用ES之后,

    2024年04月10日
    浏览(32)
  • 【Elasticsearch专栏 01】深入探索:Elasticsearch的正向索引和倒排索引是什么

    首先,要明确的是,Elasticsearch本质上只使用倒排索引来实现高效的搜索和查询功能。正向索引虽然在某些数据库和搜索系统中被提及,但在Elasticsearch的上下文中并不是一个核心概念。下面我详细解释倒排索引,并简要提及正向索引以提供对比。 倒排索引是Elasticsearch中用于实

    2024年02月22日
    浏览(40)
  • Elasticsearch(1)——倒排索引与HTTP操作Elasticsearch

    1 前言 Elastic Stack 核心产品包括 Elasticsearch【存储数据】、Kibana【展示数据】、Beats 和 Logstash【收集与传输数据】(也称为 ELK Stack)等等。能够安全可靠地从任何来源获取任何格式的数据,然后对数据进行搜索、分析和可视化。sa Elasticsearch 是一个分布式、RESTful 风格的搜索和

    2024年02月12日
    浏览(28)
  • 《面试1v1》ElasticSearch倒排索引

    🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结, 点击 突击面试 🍅 数十万人的面试选择: 面试说人话系列《面试1v1》 我是 javapub,一名 Markdown 程序员从👨‍💻,

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包