倒排索引是一种索引数据结构,存储从内容(例如单词或数字)到其在文档或一组文档中的位置的映射。简而言之,它是一个类似哈希图的数据结构,可以将您从一个词引导到一个文档或一个网页。
有两种类型的倒排索引:记录级倒排索引包含每个单词对文档的引用列表。单词级倒排索引还包含文档中每个单词的位置。后一种形式提供了更多的功能,但需要更多的处理能力和空间来创建。
假设我们要搜索文本“大家好”、“这篇文章是基于倒排索引的”、“这是一种类似hashmap的数据结构”。如果我们按(文本,文本中的单词)进行索引,则文本中具有位置的索引为:
hello (1, 1)
everyone (1, 2)
this (2, 1)
article (2, 2)
is (2, 3); (3, 2)
based (2, 4)
on (2, 5)
inverted (2, 6)
index (2, 7)
which (3, 1)
hashmap (3, 3)
like (3, 4)
data (3, 5)
structure (3, 6)
单词“hello”在文档 1(“helloeveryone”)中从单词 1 开始,因此有一个条目 (1, 1) 和单词“is”分别在文档 2 和 3 的“3rd”和“2nd”位置(这里的位置是基于单词)。
该指数可能具有权重、频率或其他指标。
建立倒排索引的步骤:
- 获取文档
去除停用词:停用词是文档中出现次数最多且无用的词,例如“I”、“the”、“we”、“is”、“an”。 - 词根词干
每当我想搜索“猫”时,我都想查看包含有关它的信息的文档。但是文档中出现的单词被称为“cats”或“catty”而不是“cat”。为了将这两个词联系起来,我将我阅读的每个词的一部分切掉,这样我就可以得到“词根”。有执行此操作的标准工具,例如“Porter’s Stemmer”。 - 记录文档 ID
如果单词已经存在,则将文档的引用添加到索引中,否则创建新条目。添加其他信息,如词频、词位置等。
例子:
Words Document
ant doc1
demo doc2
world doc1, doc2
倒排索引的优点是:
- 倒排索引允许快速全文搜索,但代价是在将文档添加到数据库时增加处理。
- 很容易开发。
- 它是文档检索系统中最流行的数据结构,例如在搜索引擎中被大规模使用。
倒排索引也有缺点:
- 更新、删除和插入的大存储开销和高维护成本。
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。