在计算机科学领域,倒排索引(也称为倒排文件)是一种存储了来自文本中的映射的索引数据结构。比如单词或者数字,对应到它们在数据库、一个文件或者一组文件中的位置。它是在文档检索系统中使用的最流行的数据结构,在搜索引擎中有大规模使用案例。
先认识 “单词—文档” 矩阵
单词—文档基本模型:
以上表示:
词1在文档1和文档4中出现,文档1包含词1和词4。
词2在文档2和文档5中出现,文档2包含词2。
…不一一啰嗦
搜索引擎的索引其实就是实现 “ 单词—文档 ”矩阵的具体数据结构。
各项实验数据表明,倒排索引是单词到文档映射关系的最佳实现方式。
倒排索引相关的基本术语
文档(Document):一般搜索引擎处理的对象是互联网网页,对于搜索引擎来讲,Word、PDF、html、XML等不同格式的文件都可以称为文档,一般以文档来表示文本信息。
文档集合(Document Collection):由若干文档构成的集合成为文档集合。比如海量的互联网网页等。
文档编号(Document ID):在搜索引擎内部,会为文档集合每个文档赋予一个唯一的内部编号,以作为文档的唯一标识,以便于处理。
单词编号(Word ID):与文档编号类似,搜索引擎内部以唯一的编号来表示某个单词,以作为某个单词的唯一表示。
倒排索引(Inverted Index):倒排索引是实现单词——文档矩阵的一种具体存储形式。通过倒排索引,可以根据单次快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:单词词典和倒排文件。
单词词典(Lexicon):搜索引擎通常的索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引记载单词本身的一些信息及指向倒排列表的指针。
倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文当中出现的位置信息,每条记录成为一个倒排向(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。
倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即为倒排文件,倒排文件是存储倒排索引的物理文件。
倒排索引示意图:
一个倒排索引的实例
实例文档如下图:
中文和英文不同,词之间无明确的分隔符号,首先需用分词系统将文档自动切分成单词序列。
然后对每个单词赋予唯一的单词编号,同时记录下哪些文档包含这个单词,处理后即得到最简单的倒排索引:
第1列单词ID即为每个单词的编号。
第2列即为对应的单词。
第3列即为每个单词对应的倒排序表。(比如单词“拉斯”,单词编号为8,倒排序表为{3,5},说明文档集合中文档3和文档5包含这个单词。)
稍复杂的带有单词频率信息的倒排索引:
就编号8—拉斯—{(3:1);(5,1)}来说,(3,1)表示“拉斯”在文档3中出现一次,(5,1)表示“拉斯”在文档5中出现1次。
更实用的、基本完善的倒排索引:
就编号8—拉斯—2—{(3;1;<4>),(5;1;<4>)}来说,文档频率2表示在两个文档出现。“<4>”表示单词出现的位置是文档中的第4个单词。
这个倒排索引基本上是一个完备的索引系统了,实际搜索系统的索引结构基本如此。
知识来源:*、《这就是搜索引擎-核心技术详解》第三章等