原文链接:机器学习中的海量数据查找—倒排索引查找 – 每天进步一点点 (longkui.site)
索引是一种用于数据快速查找的数据结构,哈希表、二分查找、分块查找也可以视为一种索引,这类索引的价值在于在较短的时间内获得最相关、最全、最深的数据集合。 在通常使用的索引中,大多是基于顺序表、哈希表或B+树的索引。倒排索引(InvertedIndex)主要用于信息检索领域,它是其中最常用的数据索引存储结构,被用来存储文档集合中某个单词对应的文档集合及单词在文件中存在的位置,因此也称为反向索引,与其相对应的是正向索引。正向索引用于存储每个文件的单词列表,并记录其位置。以下表中所示的文件及文件对应句子内容为例。 正向索引文件与文件对应内容示例:
对于上表中句子建立正向索引表如下:
对于上面中的句子建立倒排序索引如下:
通过上图的内容,可以记录某个词语对应在某些文件的出现并记录在文件中的位置。
在信息检索中,可以根据文件生成的倒排索引,当用户检索“数据算法”时,会将词语对应的文件集合取出,并且会根据相关性对文件进行排序处理,得到最终检索后的结果。
此外,在某些检索系统中,可能会有不存储词语在文件中位置的情况,但是目前大多数检索系统都会存储,主要基于两个原因:一是在海量数据的检索情况下,全文检索过程中如果没有记录位置,在获取文件动态摘要时,会通过遍历文件的方式查找关键词出现的位置,存在性能损耗,而这对于数据量级较小的系统则影响较小;二是在检索结果展示过程中,为获得较好的动态摘要,需要对文件内搜索词分布情况进行统计,一般情况下会在较集中词语的区域提取摘要,如果提前确定关键词位置,对检索体验有很好的提升。
倒排索引的数据结果是检索系统中非常重要的组成部分,检索时间是检索系统中最重要的衡量指标之一,其核心在于倒排索引的设计。
虽然哈希表等其他数据结构也能够较好地处理数据索引问题,但是对于数据量较大的情况,哈希表的性能也会受到较大的影响。在数据量较大时,会将海量数据进行分布式索引,分布式哈希表和分布式倒排索引则是较好的处理方式,但从检索的综合评价角度,分布式索引更为合适。