反向索引
反向索引是一种索引数据结构,用于存储从内容(例如单词或数字)到其在一个文档或一组文档中的位置的映射。 简而言之,它是一种类似于数据结构的哈希映射,可将您从单词引导到文档或网页。
反向索引有两种类型:记录级反向索引包含每个单词的文档参考列表。 单词级反向索引还包含文档中每个单词的位置。 后一种形式提供更多功能,但需要更多处理能力和空间来创建。
假设我们要搜索文本"hello everyone", "this article is based on inverted index", "which is hashmap like data structure"
。 如果我们按(文本,文本中的单词)索引,则文本中具有位置的索引为:
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"
("hello everyone"
)以单词 1 开头,因此条目(1, 1, 1)
以及文档 2 和 3 中的单词"is"
分别位于第三和第二位置 (此处的位置基于单词)。
索引可以具有权重,频率或其他指标。
建立反向索引的步骤:
-
提取文档
停用词的删除:停用词是文档中最常出现且无用的词,例如
"I", "the", "we", "is", "an"
。 -
单词的词根
每当我要搜索
"cat"
时,我都想查看包含有关其信息的文档。 但是文档中出现的单词称为"cats"
或"catty"
,而不是"cat"
。 为了将这两个词联系起来,我将砍下每个阅读的词的一部分,以便获得“词根”。 有一些执行此操作的标准工具,例如 Porter 的词干提取器。 -
记录文档 ID
如果单词已经存在,则将文档引用添加到索引,否则创建新条目。 添加其他信息,例如单词的频率,单词的位置等。
对所有文档重复上述操作,并对单词排序。
示例:
Words Document
ant doc1
demo doc2
world doc1, doc2
反向索引的优点是:
-
反向索引允许快速的全文本搜索,但当将文档添加到数据库时,其代价是处理量增加。
-
很容易开发。
-
它是文档检索系统中最流行的数据结构,例如在搜索引擎中得到了大规模使用。
反向索引也有缺点:
- 大的存储开销和更新,删除和插入的高维护成本。
版权属于:月萌API www.moonapi.com,转载请注明出处