一文读懂倒排序索引涉及的核心概念
创始人
2024-05-30 16:43:36
0

基础概念

相信对于第一次接触Elasticsearch的同学来说,最难理解的概念就是倒排序索引(也叫反向索引),因为这个概念跟我们之前在传统关系型数据库中的索引概念是完全不同的!在这里我就重点给大家介绍一下倒排序索引,这个概念搞明白之后,然后学习Elasticsearch就会清晰很多了。

正向索引和倒排序索引

在没有搜索引擎时,我们是直接输入一个网址,然后获取网站内容,这时我们的行为是:

document -> to -> words 通过文章,获取里面的单词,此谓正向索引,forward index.

有了搜索引擎后,我们的行为是:输入一个单词,找到含有这个单词或者和这个单词有关系的文章:word -> to -> documents 我们把这种索引叫做inverted index,直译过来叫做倒排序索引,也叫反向索引。

倒排序索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排序索引,可以根据单词快速获取包含这个单词的文档列表。倒排序索引主要由两个部分组成:“单词词典”和“倒排文件”

倒排序索引中重要的概念

文档(Document)

一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来说,涵盖更多种形式,比如Word,PDF,html,XML等不同格式的文件都可以称之为文档

字段(Field)

可以理解成数据库行中的字段,一个Document会由一个或多个Field组成

文档编号(Document ID)

在搜索引擎内部,会将文档集合内每个文档赋予一个唯一的内部编号,以此编号来作为这个文档的唯一标识,这样方便内部处理,每个文档的内部编号即称之为“文档编号”,后文有时会用DocID来便捷地代表文档编号。

举个例子,文档和词条之间的关系如下图:

上图中每一行就是一个Document

字段值被分析之后,存储在倒排索引中,倒排索引存储的是分词(Term)和文档(Doc),它们之间的关系,简化版的倒排索引如下图:

上图中counter代表统计分词的次数

单词词典(Lexicon)

搜索引擎的索引单位通常是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,它用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件中的位置信息。

为了更好的理解单词词典这个抽象概念,我们通过Elasticsearch来进行举例,ES 为了能快速找到某个 Term,先将所有的 Term 排个序,然后根据二分法查找 Term,时间复杂度为 O(log n);,就像通过字典查找一样,这就是 Term Dictionary。如果 Term 太多,Term Dictionary 也会很大,放内存不现实,于是有了 Term Index。就像字典里的索引页一样,S开头的有哪些 Term,分别在哪页,可以理解 Term Index是一棵树,这棵树不会包含所有的 Term,它包含的是 Term 的一些前缀,通过 Term Index 可以快速地定位到 Term Dictionary 的某个 Offset,然后从这个位置再往后顺序查找。

在内存中用 FST 方式压缩 Term Index,FST 以字节的方式存储所有的 Term,这种压缩方式可以有效的缩减存储空间,使得 Term Index 足以放进内存,但这种方式也会导致查找时需要更多的 CPU 资源。对于存储在磁盘上的倒排表同样也采用了压缩技术减少存储所占用的空间。

分词(Analysis)

将文本切分为一系列单词的过程

例如文本:谷歌地图之父跳槽FaceBook

分词结果:谷歌\ 地图\之父\跳槽\FaceBook

倒排列表(PostingList)

倒排列表记录了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。实际的倒排列表中并不只是存了文档ID这么简单,还有一些其它的信息,比如:词频(Term出现的次数)、偏移量(offset)等,如下图所示:

单词ID、单词和文档频率就不多说了,这里重点解释一下倒排列表:

DocID:单词出现的文档id

TF:单词在某个文档中出现的次数

POS:单词在文档中出现的位置

以单词“加盟”为例,其单词编号为6,文档频率为3,代表整个文档集合中有三个文档包含这个单词,对应的倒排列表为{(2;1;<4>),(3;1;<7>),(5;1;<5>)},含义是在文档2,3,5出现过这个单词,在每个文档的出现过1次,单词“加盟”在第一个文档的POS是4,即文档的第四个单词是“加盟”,其他的类似。

倒排文件(Inverted File)

所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

词典、单词、倒排文件和倒排列表概念之间的关系

一张图就能很好的说明这些概念的关系

相关内容

热门资讯

简单安卓成绩管理系统,打造高效... 你有没有想过,在繁忙的工作和学习中,如何轻松管理你的安卓设备上的成绩呢?别急,今天就来给你介绍一个超...
安卓系统ui设计好吗,打造极致... 你有没有发现,每次打开手机,安卓系统的界面总是那么吸引眼球呢?今天,我们就来聊聊这个话题——安卓系统...
16th系统安卓版本,创新功能... 你有没有发现,你的手机最近是不是有点不一样了?是不是觉得操作起来更加流畅,界面也更加美观了呢?哈哈,...
苹果系统能玩安卓游戏吗 你有没有想过,你的苹果手机里能不能玩安卓游戏呢?这可是个让人好奇不已的问题哦!想象你手握着那光滑的i...
国外使用安卓系统吗,全球安卓系... 你有没有想过,为什么你的手机里装的是安卓系统,而你的外国朋友却用的是苹果?今天,就让我带你一起探索国...
安卓双系统怎么设置小米,体验双... 你有没有想过,手机里装两个系统,一个安卓,一个iOS,那感觉是不是就像拥有了两个世界?今天,就让我来...
安卓系统不如ios流畅,安卓系... 你有没有发现,每次拿出手机,安卓和iOS的用户总是免不了要来一场“谁更流畅”的辩论?我最近也深入研究...
安卓系统在下载东西在哪,安卓系... 你有没有遇到过这种情况:手机里突然想下载个新应用或者文件,可是翻遍手机,就是找不到那个神秘的下载按钮...
安卓系统可以连接airport... 你有没有想过,你的安卓手机竟然能和机场来个亲密接触呢?没错,就是那种高大上的国际机场,那些穿梭在跑道...
安卓系统软件怎样删除,安卓系统... 手机里的安卓系统软件越来越多,是不是感觉有点乱糟糟的?别急,今天就来教你怎么轻松删除那些不再需要的软...
电脑备份安卓车机系统,电脑备份... 你有没有想过,你的安卓车机系统就像是一辆行驶在信息高速公路上的汽车,而备份就像是给这辆车装上了备用轮...
微信ios换安卓系统,无缝衔接 最近是不是有不少小伙伴在纠结微信从iOS系统换到安卓系统的事情呢?这可是个大问题,毕竟微信可是咱们日...
可以给安卓系统装APP,畅享智... 你有没有想过,你的安卓手机里可以装上那些只在苹果手机上才能用的APP呢?没错,今天就要来告诉你,这可...
安卓系统视频转音频教程,享受纯... 亲爱的手机控们,你是否有过这样的经历:一部精彩的电影,一段感人的演讲,或者是某个瞬间让你会心一笑的短...
安卓传苹果系统怎么传,安卓到苹... 你是不是也和我一样,手里拿着安卓手机,却对苹果系统的魅力无法抗拒?想要把安卓手机里的宝贝转移到苹果设...
安卓系统设置软件不升级,安卓系... 你有没有发现,你的安卓手机系统设置软件好像好久没更新了呢?是不是觉得有点out了?别急,今天就来给你...
win7模拟安卓系统,打造跨平... 亲爱的读者们,你是否曾经幻想过在Windows 7的系统上运行安卓应用?想象那是一种怎样的奇妙体验呢...
安卓系统手机应用商店,畅享智能... 你有没有发现,现在手机里最不能少的就是那些五花八门的应用了?无论是追剧、购物、学习还是娱乐,手机应用...
安卓系统三星手表,安卓系统下的... 你有没有发现,最近身边的朋友们都在戴一种特别酷的手表?没错,就是安卓系统的三星手表!这可不是随便一款...
安卓什么系统最强手机,揭秘最强... 你有没有想过,安卓手机的世界里,哪一款手机的系统最强大呢?这就像是在美食界寻找那道最让人垂涎的佳肴一...