倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。(摘自百度百科)
一组数据:
id(0) = contents(“my name is index”)
id(1) = contents(“my name is inverted index”)
id(2) = contents(“my name is happybean”)
…
一般情况下往往根据key(文章id)去查找对应的value(文章内容)。
查找 id为1的文章内容:
id = 1 : my name is inverted index
如果此时想查找 index 出现在哪个文章中,需要遍历整个文章库,再比较内容中是否包含index 这个单词。
显然,从效率上看,该方法不是很高效,尤其是海量数据中,更是不可取的。
那么以反向思维来思考,以文章内容中的单词为key,单词所在文章号为value,就可以很好的解决以上问题。
建立单词和文章id的映射关系:
my :{0,1,2}
name :{0,1,2}
is :{0,1,2}
index :{0,1}
inverted :{1}
happybean:{2}
此时再查找index出现在哪个文章中,便一目了然了。
若查找 inverted index 出现在哪个文章中,只需计算集合:
inverted ∩ index = {1} ∩ {0,1} = {1}
所以, inverted index 在 id 为 1 的文章中。单词和文章id的映射关系就可以看作为倒排索引。
这便是我理解的倒排索引的基本模型了。