倒排索引也叫做反向索引(inverted单词也有反转的意思,只不过大家喜欢翻译成倒排索引)。

倒排索引在搜索引擎中经常用到,倒排索引也叫做反向索引。某天在想,为什么叫做倒排索引呢?倒过来的,反转过来的。那么,非倒排索引是什么样子的。解释一大堆。云里雾里。

后来知道,反向索引是相对正向索引而言的,那什么是正向索引?我想,了解了正向索引,就能知道反向索引的产生背景了。

 

下面是网上一些资料说法:

 

每个文件都对应一个文件ID,文件内容被表示为一串关键词的*。实际上在搜索引擎索引库中,关键词也已经转换为关键词ID。这样的数据结构就称为正向索引
倒排索引正向索引还不能直接用于排名。假设用户搜索关键词2,如果只存在正向索引的话,排名程序需要扫描所有索引库中的文件,找出包含关键词2 的文件(索引文件),再进行相关性计算。这样的计算量无法满足实时返回排名结果的要求。
所以搜索引擎会将正向索引数据库重新构造为倒排索引,把文件对应到关键词的映射转换为关键词到文件的映射,每个关键词都对应着一系列文件,这些文件中都出现了这个关键词。

 

搜索引擎工作原理之预处理

预处理总共分为几个步骤:1.提取文字、2.中文分词、3.去停止词、4.消除噪声、5.去重、6.正向索引、7.倒排索引、8.链接关系计算、9.特殊文件处理

 

 

上面说法感觉不是很明白。现在整理一下自己的理解

 

为每篇文档生成一个关键词集合,也就是提取这篇文档中的所有关词

比如文档1

经过分词,提取文档1中出现的关键词有20个

 

这个20个关键词集合起来,每个关键词都会顺便记录它出现在文档的位置,出现的次数等信息

正向索引的结构像下面这样子的:

 

文档编号1  此文档中出现的关键词列表(单词1,出现位置,出现次数;单词2,出现位置,出现次数………..)

文档编号2  此文档中出现的关键词列表

 

这是正向索引。

如果要搜索关键词”单词1”,则去正向索引可以直接查出来哪些文档包含了单词1。正向索引还是需要遍历扫描(扫描所有正向索引文件才知道哪些文档带有某个关键词),性能比较慢。

 

顿时明白了某个资料中提到这句话:实际上,时间、内存、处理器等等资源的限制,技术上正向索引是不能实现的。


跟正向索引相比,反向索引就是反过来。怎么个反过来法呢?

 

左边是关键词,右边是文档编号,如下:

 

关键词1   带有此关键词的文档编号1,文档编号2….

关键词2   带有此关键词的文档编号1,文档编号2….

 

 

很多介绍太学术化了,即便是做技术开发的,没有实际应用过,一时难以理解。

作为初级阶段的理解,并不完善,有错误才会加深理解。期待以后完善,欢迎指正。大部分介绍都是图的形式,有机会我想看看索引的代码实现层面,也许能够加深理解。