首页 > 其他分享 >一文读懂倒排序索引涉及的核心概念

一文读懂倒排序索引涉及的核心概念

时间:2023-09-27 10:39:20浏览次数:40  
标签:Term 倒排 索引 单词 读懂 文档 排序




一文读懂倒排序索引涉及的核心概念_搜索引擎


基础概念

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

正向索引和倒排序索引

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

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

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

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

倒排序索引中重要的概念

文档(Document)

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

字段(Field)

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

文档编号(Document ID)

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

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


一文读懂倒排序索引涉及的核心概念_倒排索引_02


上图中每一行就是一个Document

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


一文读懂倒排序索引涉及的核心概念_elasticsearch_03


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

单词词典(Lexicon)

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


一文读懂倒排序索引涉及的核心概念_倒排索引_04


为了更好的理解单词词典这个抽象概念,我们通过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)等,如下图所示:


一文读懂倒排序索引涉及的核心概念_elasticsearch_05


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

DocID:单词出现的文档id

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

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

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

倒排文件(Inverted File)

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

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

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


一文读懂倒排序索引涉及的核心概念_elasticsearch_06


标签:Term,倒排,索引,单词,读懂,文档,排序
From: https://blog.51cto.com/liwen629/7621133

相关文章

  • 一文读懂:下一代微服务技术Service Mesh
    相信提到微服务大家一定不会陌生,但是说起服务网格,即ServiceMesh,很多同学可能就会画大大的问号了!话不多说先给结论:我们可以简单的把ServiceMesh理解为网络代理,它可以解决传统微服务中的痛点,把服务通信及相关管控功能从业务中分离!网络代理网络代理可以简单类比成现实生活中的中......
  • 合并K个排序链表
    合并K个排序链表描述合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出:1->1->2->3->4->4->5->6题解使用heapq,但是ListNode没有比较函数,所以需要自行定义:ListNode.__lt__=lambdax,y:x.val<......
  • 500_想在iPad上学习?这个PDF电子书搜索引擎实在太好用
    这是一篇原发布于2020-02-2909:50:00得益小站的文章,备份在此处。前段时间,各家出版社纷纷“用知识抗击疫情”,开放了自家的图书资源来倡导读者在家学习。轶哥也下载了许多电子书。不得不说原版的电子书质量就是高,这些电子书可以完美的标注,复制;相较于影印版PDF体积更小,阅读体验也......
  • 倒排索引为什么比正向索引快
    倒排索引为什么比正向索引快 倒排索引(InvertedIndex)相对于正向索引(ForwardIndex)在某些情况下可以更快,这主要是因为倒排索引的数据结构和搜索方式适合特定的用例和查询操作。以下是倒排索引比正向索引更快的原因: 1.**高效的全文搜索**:倒排索引是为全文搜索而设计的,它将文......
  • drf(过滤、排序、异常)
    一.过滤组件1内置过滤组件SearchFilter#缺点:外键字段的搜索操作将会抛出异常:RelatedFieldgotinvalidlookup:icontains#1)在视图文件views.py中导入drf的搜索组件fromrest_framework.filtersimportSearchFilter#2)将搜索组件配置给群查接口视图类的filter_b......
  • 数据库中order by 依照指定顺序排序如何操作
    SQL学习之使用orderby依照指定顺序排序或自己定义顺序排序 我们通常须要依据客户需求对于查询出来的结果给客户提供自己定义的排序方式,那么我们通常sql须要实现方式都有哪些,參考很多其它资料总结例如以下:一、假设我们仅仅是对于在某个程序中的应用是须要依照例如以下的方......
  • 一文读懂分布式追踪的历史发展点滴
    【摘要】本文介绍了可观测生态领域相关的技术——DistributedTracing(分布式追踪)【作者】李杰,专注于Java虚拟机技术、云原生技术领域的探索与研究。什么是“DistributedTracing-分布式追踪”?DistributedTracing(分布式追踪)是一种用于监测和分析分布式应用程序的技术和方法......
  • 排序
    排序算法哪些是稳定的排序算法,哪些是不稳定的稳定的:直接插入排序:最坏情况是逆序,时间复杂度是O(N2),最好情况是插入的都是顺序,时间复杂度O(N),空间复杂度O(1)冒泡排序:时间复杂度O(N2),空间复杂度O(1)计数排序:时间复杂度O(N+Range),空间复杂度O(range)不稳定:希尔排序:时间复杂度O(N......
  • MySQL索引原理
    入驻博客园的第一篇博客,希望能够将知识点解释清楚,有些地方可能有一些啰嗦,望见谅。(本文为转载,转载地址文末,自己加了一些结构上的调整) 一、几种树的介绍首先介绍几种树的数据结构:二叉搜索树(BST)、平衡二叉树、B树、B+树1.1二叉搜索树二叉搜索树具有以下性质:(1)......
  • 如何实现一个数组按照另外一个数组的顺序进行排序?
    数组arr1按照arr2的顺序展示,如何实现:一、简单类型数组letarr1=[1,2,3,4,5] letarr2=[5,3,2,4,1]arr1.sort((prev,next)=>{ returnarr2.indexOf(prev)-arr2.indexOf(next)})console.log(arr1)//[5,3,2,4,1]二、复杂类型数组letarr1=[{......