反向索引是一种索引数据结构, 用于存储从内容(例如单词或数字)到其在一个文档或一组文档中的位置的映射。简而言之, 它是一种类似于数据结构的哈希图, 可将你从单词引导到文档或网页。
倒排索引有两种类型:A
记录级倒排索引
包含每个单词的文档参考列表。一种
词级倒排索引
还包含每个单词在文档中的位置。后一种形式提供更多功能, 但需要更多处理能力和空间来创建。
假设我们要搜索文本"大家好", "本文基于倒排索引", "类似于数据结构的哈希图"。如果我们按(文本, 文本中的单词)索引, 则文本中具有位置的索引为:
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)
文档1中的单词" hello"("大家好")以单词1开头, 因此条目(1、1、1)以及文档2和3中的单词" is"分别位于" 3rd"和" 2nd"位置(此处的位置基于单词)。
该索引可以具有权重, 频率或其他指标。
建立反向索引的步骤:
取得文件
删除停用词:停用词是文档中最常出现且无用的词, 例如" I", " the", " we", " is", " an"。
词根词干
每当我想搜索"猫"时, 我都希望看到包含有关其信息的文档。但是文档中出现的单词称为"猫"或"猫", 而不是"猫"。为了将这两个词联系起来, 我将砍下每个阅读的词的一部分, 以便获得"词根"。有一些执行此操作的标准工具, 例如" Porter’s Stemmer"。
记录文件编号
如果单词已经存在, 则将文档引用添加到索引, 否则创建新条目。添加其他信息, 例如单词的频率, 单词的位置等。
对所有文档重复此操作, 并对单词进行排序。
例子:
Words Document
ant doc1
demo doc2
world doc1, doc2
倒排索引的优点是:
- 倒排索引是为了允许快速的全文本搜索, 但是当文档添加到数据库中时, 以增加处理为代价。
- 很容易开发。
- 它是文档检索系统中最流行的数据结构, 例如在搜索引擎中得到了大规模使用。
倒排索引也有缺点:
- 大的存储开销和更新, 删除和插入的高维护成本。
反向索引与正向索引之间的差异