什么是倒排索引
先来说说什么事正排索引,举个简单的例子,常规的数据库存储就是正排索引。
以下面的作为例子:
网页 A 中的内容片段:
Tom is a boy.
Tom is a student too.
网页 B 中的内容片段:
Jon works at school.
Tom's teacher is Jon.
构建索引时,就是在数据库里面存在两个 doc,每个 doc 记录下相应的索引信息。

这样当我们要搜索 Tom 这个关键字,就要遍历所有的记录查到索引信息,效率很慢。正排索引也有相应的优点,就是构建索引快,对于新的内容只需要增加一条记录就行了,很方便维护。
倒排索引
由于正排的耗时太长缺点,倒排就正好相反,是以 word 作为关键索引。表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的 ID 和字符在该文档中出现的位置情况。
倒排包含两部分:
1、由不同的索引词(index term)组成的索引表,称为 “词典”(lexicon)。其中包含了各种词汇,以及这些词汇的统计信息(如出现频率 nDocs),这些统计信息可以直接用于各种排名算法。
2、由每个索引词出现过的文档集合,以及命中位置等信息构成。也称为 “记录表”。就是正排索引产生的那张表。当然这部分可以没有。具体看自己的业务需求了。
下面是一个简单的倒排索引构建,只包含第一部分的。

倒排的优缺点和正排的优缺点整好相反。倒排在构建索引的时候较为耗时且维护成本较高,但是搜索耗时短。
网友评论