| 参考: https://zhuanlan.zhihu.com/p/33671444 |
| |
| 倒排索引(英语:Inverted index) |
| |
| 也常被称为反向索引、置入档案或反向档案。是文档检索系统中最常用的一种数据结构。 |
| |
| 倒排索引的典型应用案例是 apache lucene,它在全文检索领域独领风骚,另外由其衍生的如 |
| apache solr 以及商业领域应用广泛的 elastic search 等等都是行业里全文搜索的代表。 |
| |
| 倒排索引可以用来检索文档中的某个单词或者某个短语所在位置,比如从 kibana 查询某个 ip 所对应的日志, |
| 由于 kibana 是 elasticsearch 的可视化工具,而 elasticsearch 底层又是基于 apache lucene 实现,而 lucene |
| 底层又是使用倒排索引数据结构进行全文检索,所以能够很快速的定位文档位置并进行展示。 |
| |
| 倒排索引存储的是某一个单词,也可以是短语,具体根据实际情况来,通常体现在对分词器的应用,elastic search 默认 |
| 会将中文分割为一个个汉字作为索引,当我们以插件方式安装 IK 分词器后,就会以具体分割的单词作为索引, |
| 倒排索引存储的就是这个单词在某一个文档或者某一组文档中的位置的映射关系,使得我们能够通过这种关系 |
| 能够迅速定位并获取该文档。 |
| |
| 倒排索引有两个重要的概念,即索引和倒排表。 |
| 索引:索引的单词列表,可以使我们在查询时不需要扫描整个文档,这里索引是指预先将输入的文档进行处理 |
| (预处理),即分词 |
| 倒排表:倒排表中每个单词条目会包含该词在文档中的位置信息(如句子、段落等信息),这样可以实现临近 |
| 搜索。并且可以通过该倒排表计算每个单词的词频、权重,用于用户搜索的相关性计算。 |
| |
| 倒排索引和一般索引区别 |
| 个人目前的理解就是一般正常的索引,比如关系型数据库如 mysql 或 oracle,他们是对数据库中某个表的某一列 |
| 或几列预先作索引,然后在 CRUD 时通过索引操作,而倒排索引是反向操作,即预先将实际将要存储的数据作索引, |
| 再反向链接到具体的文档(类比关系型数据库的表),所以倒排索引是按 field 来的,即 field 指向 doc,而不是 |
| doc 指向 field。 |