关于倒排索引的理解

背景

最近手中有一笔非常巨大的文本资料,用普通检索来使用十分麻烦,反复查询研究后决定使用Elasticsearch来对这些文本资料创建全文索引,从而可以快速查询使用这批数据。在学习Elasticsearch的过程中遇到一个倒排索引的问题,于是算法盲的我又陷入了沉思,虽然对于使用工具没有任何影响,但是我还是打算把它弄明白。


解决

首先上百度百科的解释:

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

如果看过概念没有明白的话我们先看看与倒排索引相对的正排索引。正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。用一张图表示如下:
这里写图片描述
所以如果当我要查询word1所在的位置时,需要便利过所有的文档才能得到所有的位置信息,这样当查询体量十分巨大的全文数据时就十分耗时耗资源了。为了满足大数据全文索引的需求,人们发明了倒排索引的方式,其倒排表的结构如下:
这里写图片描述
当我需要查询word1所在的位置时,可以快速获取到所在的文档及对应位置的信息。


总结

实际上无论是正排索引还是倒排索引的本质都是维护对应的正排表和倒排表。表的核心信息是记录文档中所关键词所在的位置,而正排和倒排的区别仅仅在于表中对于位置信息的表现形式和聚类方式。倒排索引可以极大的提高全文索引的速度和效率,是几乎所有全文索引工具所使用的索引方式。

猜你喜欢

转载自blog.csdn.net/king921004/article/details/80866518