索引 是用来更快的找出需要的信息。
我们一般理解的索引都是正向索引,如数据库表
文档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所在的文档找出来?