倒排索引帮助搜索引擎在海量网页中快速找到包含用户查询词的所有网页。
基本概念
1.单词文档矩阵
如上图示,是表达哪些文档包含哪些单词的概念模型。
打对勾的位置代表包含关系;从纵向即文档维度看:每列代表文档包含了哪些单词,比如文档1包含了词汇1和4;从横向即单词维度看:每行代表单词在哪些文档中出现过,比如词汇2在文档2和3出现过。
而搜索引擎的索引就是实现单词文档矩阵的具体数据结构。可以有不同的方式:倒排索引、签名文件、后缀树等,但数据表明倒排索引是单词到文档映射的最佳实现方式。
2.文档 (Document):
代表广义的以文本形式存在的存储对象,例如网页、word、pdf、邮件等等。
3.文档集合 (Document Collection):
若干文档构成的集合。
4.文档编号 (Document ID):
文档的唯一标识,文档的内部编号。
5.单词编号 (Word ID):
单词的唯一表征,单词的编号。
6.倒排索引 (Inverted Index):
实现单词文档矩阵的一种具体存储形式,由它可以根据单词快速获取包含这个单词的文档列表。
两部分组成:单词词典和倒排文件。
单词词典 (Lexicon):
由文档集合出现的所有单词构成的字符串集合,每条索引项记载单词本身的一些信息和指向倒排列表的指针。
即用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件的位置信息。单词词典最重要的属性就是要快速定位,构建单词词典的常用数据结构有:哈希加链表结构和树形词典结构。
哈希加链表结构主要由两个部分构成,主体部分是哈希表(详见哈希表介绍),每个哈希表项保存一个指针,指针指向冲突链表,冲突链表中,相同哈希值的单词形成链表结构。
B树需要字典项能够按照大小排序,形成层级查找结构。
倒排列表 (PostingList):
记载出现过某个单词的所有文档的文档列表及单词在该文档中的位置信息,每条记录成为一个倒排项(Posting)。
包含某个单词的一系列倒排项就形成了列表结构,即该单词的倒排列表。在文档集合中出现过的所有单词及其对应的倒排列表组成倒排索引。
倒排文件 (Inverted File):
所有单词的倒排列表存储所在的磁盘的某个文件,即存储倒排索引的物理文件。
以上概念的关系如下图: