ES底层原理之倒排索引

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

目录

一、ElasticSearch架构原理

1、ElasticSearch集群的节点类型

2、不可变性

3、写和创建

4、删除和更新

5、利用磁盘缓存实时检索

6、translog提供磁盘控制

二、倒排索引

1、单词----文档矩阵

2、倒排索引

3、倒排索引简单实例


一、ElasticSearch架构原理

1、ElasticSearch集群的节点类型

Elasticsearch的一个实例是一个节点,一组节点形成一个集群。Elasticsearch集群中的节点可以通过三种不同的方式进行配置:

(1)Master节点

Master节点控制Elasticsearch集群,并负责在集群范围内创建/删除索引,跟踪哪些节点是集群的一部分,并将分片分配给这些节点。

(2)Data节点

数据节点用来保存数据和倒排索引。

(3)Client节点

如果将node.master和node.data设置为false,则将节点配置为客户端节点,并充当负载平衡器,将传入的请求路由到集群中的不同节点。 
若你连接的是作为客户端的节点,该节点称为协调节点(coordinating node)。协调节点将客户机请求路由到集群中对应分片所在的节点。对于读取请求,协调节点每次选择不同的分片来提供请求以平衡负载。

(4)存储模型

使用称为倒排索引的数据结构,用于提供低延迟搜索结果

注意:索引数据的操作只会发生在主分片(primary shard)上,而不会发生在分片副本(Replica) 上。如果索引数据的请求发送到的节点没有合适的分片或者分片是副本,那么请求会被转发到含有主分片的节点。

2、不可变性

写入磁盘的倒排索引是不可变的,它有如下好处:

①不需要锁,提升并发能力,避免锁的问题
②数据不变,一直保存在os cache中,只要cache内存足够
③filter cache一直驻留在内存,因为数据不变
④可以压缩,节省cpu和io开销

坏处:

①每次都要重新构建整个索引

3、写和创建

1)通过索引中的主分片数量进行取模运算,以确定文档应被索引到哪个分片。 
shard = hash(document_id) % (num_of_primary_shards)

2)当节点接收到来自协调节点的请求时,请求被写入到translog,并将该文档添加到内存缓冲区。

如果请求在主分片上成功,则请求将并行发送到副本分片。只有在所有主分片和副本分片上的translog被fsync’ed后,客户端才会收到该请求成功的确认。

  • 内存缓冲区以固定的间隔刷新(默认为1秒),并将内容写入文件系统缓存中的新段。此分段的内容更尚未被fsync’ed(未被写入文件系统),分段是打开的,内容可用于搜索。
  • translog被清空,并且文件系统缓存每隔30分钟进行一次fsync,或者当translog变得太大时进行一次fsync。这个过程在Elasticsearch中称为flush。在刷新过程中,内存缓冲区被清除,内容被写入新的文件分段(segment)。当文件分段被fsync’ed并刷新到磁盘,会创建一个新的提交点(其实就是会更新文件偏移量,文件系统会自动做这个操作)。旧的translog被删除,一个新的开始。

ES底层原理之倒排索引

4、删除和更新

删除:每一个提交点包括一个.del文件,包含了段上已经被删除的文档当一个文档被删除,它是实际上只是在.del文件中被标记删除,亦然可以匹配查询,但最终返回之前会被从结果中删除。

更新:旧版本的文档被标记为删除,新版本的文档在新的段中索引

5、利用磁盘缓存实时检索

1)新收到的数据写入新的索引文件中,生成倒排索引叫做一个端--segment

2)使用一个commit文件记录索引内的所有segment

3)新数据进入内存buffer中

4)内存buffer生成一个新的segment,刷到文件系统缓存中,ES即可检测到新的segment

5)文件系统缓存真正同步到磁盘中,commit文件更新

6、translog提供磁盘控制

防止丢失(主机错误、磁盘故障)。当ES把数据写入buffer中,还记录了translog日志

二、倒排索引

1、单词----文档矩阵

文档1

文档2

文档3

文档4

文档5

文档6

单词1

  ✅

  ✅

单词2

  ✅

  ✅

单词3

  ✅

  ✅

单词4

  ✅

  ✅

单词5

  ✅

单词6

  ✅

2、倒排索引

1)、单词词典(Lexicon):搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。

2)、倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。

ES底层原理之倒排索引

3、倒排索引简单实例

假设文档集合包含四个文档,对这个文档集合建立倒排索引。

文档编号

文档内容

1

谷歌地图之父跳槽Facebook

2

谷歌地图之父加盟Facebook

3

谷歌地图创始人拉斯离开谷歌加盟Facebook

4

谷歌地图之父拉斯加盟社交网站Facebook

1)、取得关键词—分词处理

没有实际意义的:“的”,“是”,“in”,“too”;

标点符号、空格;

统一大小写:“a”,“A”。还原单词 lives-->live

2)、建立索引列表

文章位置、出现的频率、出现的位置

3)、应用原因

时间复杂度--1秒

单词ID

单词

文档频率

倒排列表(DocID:TF:<Position>)

1

谷歌

4

(1:1:<1>),(2:1:<1>),(3:2:<1><6>),(4:1:<1>)

2

地图

4

(1:1:<2>),(2:1:<2>),(3:1:<2>),(4:1:<2>)

3

之父

3

(1:1:<3>),(2:1:<3>),(4:1:<3>)

4

跳槽

1

(1:1:<4>)

5

Facebook

4

(1:1:<5>),(2:1:<5>),(3:1:<8>),(4:1:<8>)

6

加盟

2

(2:1:<4>),(4:1:<5>)

7

创始人

1

(3:1:<3>)

8

拉斯

2

(3:1:<4>),(4:1:<4>)

9

离开

1

(3;1:<5>)

10

社交

1

(4:1:<6>)

11

网站

1

(4:1:<7>)

有了这个索引系统,搜索引擎可以很方便地响应用户的查询,比如用户输入查询词“Facebook”,搜索系统查找倒排索引,从中可以读出包含这个单词的文档,这些文档就是提供给用户的搜索结果,而利用单词频率信息、文档频率信息即可以对这些候选搜索结果进行排序,计算文档和查询的相似性,按照相似性得分由高到低排序输出,此即为搜索系统的部分内部流程。文章来源地址https://www.toymoban.com/news/detail-458529.html

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

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

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

相关文章

  • ES高频面试问题:一张图带你读懂 Elasticsearch 中“正排索引(正向索引)”和“倒排索引(反向索引)”区别

    从广义来说,doc values 本质上是一个序列化的 列式存储 。列式存储 适用于聚合、排序、脚本等操作,所有的数字、地理坐标、日期、IP 和不分词( not_analyzed )字符类型都会默认开启, 不支持 text 和 annotated_text 类型 倒排 :即 词项 = 包含当前词项的doc_id的列表 的映射。倒排

    2024年02月02日
    浏览(41)
  • 深入了解Elasticsearch搜索引擎篇:倒排索引、架构设计与优化策略

    倒排索引是一种用于快速检索的数据结构,常用于搜索引擎和数据库中。与传统的正排索引不同,倒排索引是根据来建立索引,而不是根据文档ID。 倒排索引的建立过程如下:首先,将每个文档拆分成一系列的或词项,然后建立一个词项到文档的映射。对每个关

    2024年02月12日
    浏览(40)
  • Elasticsearch分词详解:ES分词介绍、倒排索引介绍、分词器的作用、停用词

    详见:https://blog.csdn.net/weixin_40612128/article/details/123476053

    2024年02月12日
    浏览(40)
  • Elasticsearch底层原理分析——新建、索引文档

    8.1.0 Elasticsearch Node的角色 与下文流程相关的角色介绍: Node Roles 配置 主要功能说明 master node.roles: [ master ] 有资格参与选举成为master节点,从而进行集群范围的管理工作,如创建或删除索引、跟踪哪些节点是集群的一部分以及决定将哪些分片分配给哪些节点等 data node.roles:

    2024年02月04日
    浏览(40)
  • ES中倒排索引机制

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

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

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

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

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

    2024年02月10日
    浏览(33)
  • 【ES】Elasticsearch-深入理解索引原理

    索引(Index) ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新

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

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

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

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

    2024年04月15日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包