倒排索引也叫做反向索引(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….
很多介绍太学术化了,即便是做技术开发的,没有实际应用过,一时难以理解。
作为初级阶段的理解,并不完善,有错误才会加深理解。期待以后完善,欢迎指正。大部分介绍都是图的形式,有机会我想看看索引的代码实现层面,也许能够加深理解。