Inverted index

Posted by Keal on February 5, 2021

倒排索引常用于搜索引擎,文档搜索. ElasticSearch就使用了倒排索引来检索数据.

正向索引

要理解倒排索引,可以先看看正向索引是怎样的.

举个例子,文章里包含了许多的文字,你想找某个文字出现在哪些文章里. 那么按照遍历每个文章,查看文章中是否出现过关键字的查找就是正向索引.这个查找顺序是文章->文字的. 这就是正向索引(forward index)

缺点: 按照文字来搜索文章需要遍历所有的文章才能得到正确结果.效率较慢

倒排索引

与正向索引相反,倒排索引是文字->文章. 也就是说,存储是按某个文字出现在了哪些文章里来保存数据. 你可以简单想象一个字典,正向索引里的key是文章,value是文字, 倒排索引里key是文字, value是文章.

优点: 按照文字来搜索文章的效率很高.

这就是倒排本身的核心思路了.

Q&A

Q: 为什么ES的搜索效率快? A: ES除了使用倒排索引,还做了许多优化,例如对文字在建立一个索引.比如”hello”,”world”,可以提取出”h”和”w”来再建立一层索引,这样索引的大小更小,使其能够放入内存.内存的效率自然是吊打磁盘, 除此之外,还使用到了FST数据结构来优化操作等等.