倒排索引

倒排索引(inverted index),也常被称为反向索引、植入档案或反向档案,是一种索引方法,被用来存储在在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

原理如图1-1所示

 

 

 

倒排索引 - 豆豆 - 豆豆的博客
图1-1
举例
数据表:以英文为例,下面是要被索引的文本,如表1-1所示
倒排索引 - 豆豆 - 豆豆的博客
表1-1
 
索引表:下面我们就得到反向索引文件。如表1-2所示
倒排索引 - 豆豆 - 豆豆的博客
表1-2
简化索引表:我们将PPTID直接用ID来表示,如表1-3所示
倒排索引 - 豆豆 - 豆豆的博客
表1-3
倒排序表:检索的条件“what”,“is”,“it”将对应这个集合:{1,2} {1,1,2,3,4} {1,1,2,3}={1,2}。对于相同的文字,我们得到后面这些完全反向索引,有文档数量和当前查询的单词结果组成的成对数据。同样,文档数量和当前查询的单词结果都从零开始。所以,“bananan”:(3,4)就是说“banana”在第三个文档里(PPT3),而且在第三个文档的位置是第四个单词(地址为4)。
倒排索引 - 豆豆 - 豆豆的博客
表1-4
关于建立倒排索引其实就向我们写一本小说一样,就是要建立一个目录是,让读者清楚知道他想了解的章节标题所对应的页码。
来自百度文档:
倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排 索引文件 ,简称 倒排文件 (inverted file)。
倒排列表用来记录有哪些文档包含了某个单词。一般在文档集合里会有很多文档包含某个单词,每个文档会记录文档编号(DocID),单词在这个文档中出现的次数(TF)及单词在文档中哪些位置出现过等信息,这样与一个文档相关的信息被称做倒排索引项(Posting),包含这个单词的一系列倒排索引项形成了列表结构,这就是某个单词对应的倒排列表。右图是倒排列表的示意图,在文档集合中出现过的所有单词及其对应的倒排列表组成了倒排索引。
在实际的搜索引擎系统中,并不存储倒排索引项中的实际文档编号,而是代之以文档编号差值(D-Gap)。文档编号差值是倒排列表中相邻的两个倒排索引项文档编号的差值,一般在索引构建过程中,可以保证倒排列表中后面出现的文档编号大于之前出现的文档编号,所以文档编号差值总是大于0的整数。如图2所示的例子中,原始的 3个文档编号分别是187、196和199,通过编号差值计算,在实际存储的时候就转化成了:187、9、3。之所以要对文档编号进行差值计算,主要原因是为了更好地对数据进行压缩,原始文档编号一般都是大数值,通过差值计算,就有效地将大数值转换为了小数值,而这有助于增加数据的压缩率。
 
倒排索引[2] (英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。倒排索引[2] 有两种不同的反向索引形式:一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。后者的形式提供了更多的兼容性(比如短语搜索),但是需要更多的时间和空间来创建。现代搜索引擎的索引[3] 都是基于倒排索引。相比“签名文件”、“后缀树”等索引结构, “倒排索引”是实现单词到文档映射关系的最佳实现方式和最有效的索引结构.
实现方法:

(1)简单法

1)将文档分析称单词term标记,
2)使用hash去重单词term
  3)对单词生成倒排列表
  倒排列表就是文档编号DocID,没有包含其他的信息(如词频,单词位置等),这就是简单的索引。
  这个简单索引功能可以用于小数据,例如索引几千个文档。然而它有两点限制:
  1)需要有足够的内存来存储倒排表,对于搜索引擎来说, 都是G级别数据,特别是当规模不断扩大时 ,我们根本不可能提供这么多的内存。
  2)算法是顺序执行,不便于并行处理。

(2)合并法

1)页面分析,生成临时倒排数据索引A,B,当临时倒排数据索引A,B占满内存后,将内存索引A,B写入临时文件生成临时倒排文件,
  2) 对生成的多个临时倒排文件 ,执行多路归并 ,输出得到最终的倒排文件 ( inverted file)。
索引创建过程中的页面分析 ,特别是中文分词为主要时间开销。算法的第二步相对很快。这样创建算法的优化集中在中文分词效率上。

猜你喜欢

转载自lf6627926.iteye.com/blog/2068589