侧边栏壁纸
博主头像
极客日记 博主等级

行动起来,活在当下

  • 累计撰写 93 篇文章
  • 累计创建 17 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

简单理解倒排索引

Jack.Jia
2023-11-07 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

前言

当代互联网时代,信息爆炸式增长,如何高效地检索和管理海量数据成为一项关键任务。倒排索引(Inverted Index)作为一种常用的数据结构,被广泛应用于搜索引擎、数据库和信息检索系统中。在本篇博客总结中,我将详细介绍倒排索引的基本概念、构建过程以及应用场景,并通过示例和图片来解释相关概念。

正排索引和倒排索引

说到倒排索引,就不得不提一下正排索引。一个简单的例子:

当用户发起查询时(假设查询为一个关键词),搜索引擎会扫描索引库中的所有文档,找出所有包含关键词的文档,这样依次从文档中去查找是否含有关键词的方法叫做正排索引。互联网上存在的网页(或称文档)不计其数,这样遍历的索引结构效率低下,无法满足用户需求。

正排索引结构如下:
文档 1 的 ID → 单词 1 的信息;单词 2 的信息;单词 3 的信息…
文档 2 的 ID → 单词 3 的信息;单词 2 的信息;单词 4 的信息…
...

20210314105853616.png

为了解决正排索引的效率问题,倒排索引应运而生。从正排索引到倒排索引的变化:把“文档 → 单词”的形式变为“单词 → 文档”的形式。

倒排索引具体结构如下:
单词 1 → 文档 1 的 ID;文档 2 的 ID;文档 3 的 ID…
单词 2 → 文档 1 的 ID;文档 4 的 ID;文档 7 的 ID…

20210314105916820.png

倒排索引的基本概念

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

  • 单词词典 (Lexicon):搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
  • 倒排列表 (PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项 (Posting)。根据倒排列表,即可获知哪些文档包含某个单词。
  • 倒排文件 (Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

单词 - 文档矩阵

单词 - 文档矩阵是表达两者之间所具有的一种包含关系的概念模型。

现有以下几个文档:

D1:乔布斯去了中国。
D2:苹果今年仍能占据大多数触摸屏产能。
D3:苹果公司首席执行官史蒂夫·乔布斯宣布,iPad2将于3月11日在美国上市。
D4:乔布斯推动了世界,iPhone、iPad、iPad2,一款一款接连不断。
D5:乔布斯吃了一个苹果。

此时用户查询为“苹果 And (乔布斯 Or iPad2)”,表示包含单词“苹果”,同时还包含“乔布斯”或“iPad2”的其中一个。

则“单词 - 文档”矩阵为:

20210314105948491.png

该矩阵可以从两个方向进行解读:

纵向: 表示每个单独的文档包含了哪些单词,比如 D1 包含了“乔布斯这个词”,D4 包含了“乔布斯”和“iPad2”。
横向: 表示哪些文档包含了该单词,比如 D2、D3、D5 包含了“苹果”这个词。

搜索引擎的索引其实就是实现“单词 - 文档”矩阵的具体数据结构。可以有不同的方式来实现上述概念模型,比如“倒排索引”、“签名文件”、“后缀树”等方式,但是“倒排索引”是实现单词到文档映射关系的最佳实现方式。

倒排索引简单实例

还是用上面提到的例子:

Doc1:乔布斯去了中国。
Doc2:苹果今年仍能占据大多数触摸屏产能。
Doc3:苹果公司首席执行官史蒂夫·乔布斯宣布,iPad2将于3月11日在美国上市。
Doc4:乔布斯推动了世界,iPhone、iPad、iPad2,一款一款接连不断。
Doc5:乔布斯吃了一个苹果。

这五个文档中的数字代表文档的 ID,比如 "Doc1" 中的“1”。

通过这 5 个文档建立简单的倒排索引:

单词 ID(WordID) 单词 (Word) 倒排列表 (DocID)
1 乔布斯 1,3,4,5
2 苹果 1,3,4,5
3 iPad2 3,4
4 宣布 3
5 1,4,5
... ... ...

​首先要用分词系统将文档自动切分成单词序列,这样就让文档转换为由单词序列构成的数据流,并对每个不同的单词赋予唯一的单词编号 (WordID),并且每个单词都有对应的含有该单词的文档列表即倒排列表。

如上表所示,第一列为单词 ID,第二列为单词 ID 对应的单词,第三列为单词对应的倒排列表。如第一个单词 ID“1”对应的单词为“乔布斯”,单词“乔布斯”的倒排列表为 {1,3,4,5}, 即文档 1、文档 3、文档 4、文档 5 都包含有单词“乔布斯”。

这上面的列表是最简单的倒排索引。不过也可以帮助我们简单理解倒排索引了。

总结

倒排索引作为一种高效的数据结构,广泛应用于信息检索、搜索引擎和数据库系统中。它通过将文档中的单词映射到出现该单词的文档集合,实现了快速的信息检索。倒排索引的构建过程包括文本预处理、倒排索引表构建和遍历文档集合等步骤。倒排索引在搜索引擎、数据库系统和文本挖掘等领域有着重要的应用价值。

0

评论区