什么是倒排索引?

索引 是用来更快的找出需要的信息。

我们一般理解的索引都是正向索引,如数据库表

文档id 字段1 字段2 字段4 字段4
文档1 单词e 单词b 单词e 单词g
文档2 单词c 单词c 单词d 单词a
文档3 单词a 单词a 单词c 单词f

在这里 文档id是主键


如果我们想查找 '单词a‘  ,我们需要从文档1开始逐个列逐个字段去遍历查找才能得出结果



那么搜索引擎怎么做呢

如果是把 列x 看成是 一篇文章 字段x 对应的是该文章的单词,用上面的这个表进行存储的话,我们需要多少列呢?

当查找的时候又该如何查找呢?


每篇文件都由不同的单词组成,单词各不相同,又或多或少。

显然,如果使用上面这个表进行存储,效率低下不说,限于目前计算机的条件,也是不可能实现的。


那么搜索引擎怎么做呢?倒排索引


“倒排索引”这个名词很唬人,其实原理很简单。

其中每条记录,记录的是一个单词都在哪些文档中出现。然后对这些记录进行排序。


举个例子,我们有2篇文档,内容分别如下

文档id 文档内容
1 i love honor
2 i  like mm

生成倒排索引如下

单词 文档id  
i 1,2 i 在文档1和2中出现
love 1 love在文档1中出现
honor 1 honor在文档1中出现
like 2 like在文档2中出现
mm 2 mm在文档2中出现
在这里 单词是主键


如果我们搜索 ‘honor’ 这个关键字,是不是一下就能将honor所在的文档找出来?


这就是所谓的倒排索引,你看懂了吗?

posted on 2012-03-05 21:54  hercules  阅读(284)  评论(0编辑  收藏  举报