日常如果我们想在一本书中找一句存在的句子,这句话你不知道它在哪个章节,那么你只能一章一章的翻看,
这个映射关系是从文档到关键词,因为我们是翻阅不同的章节文档来检索哪里出现了这么一句话。
而倒排索引是建立关键词到文档的映射关系,给你几个关键词,找出包含关键词的文档。
倒排索引源于实际应用中需要根据属性值(关键字)来查找记录,lucene是基于倒排索引实现的。
这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。
由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。
倒排索引的组成
倒排索引由两个部分组成:单词词典和倒排文件。
倒排文件
所有单词的倒排列表顺序的存储在磁盘的某个文件里,这个文件即被称为倒排文件,倒排文件是存储倒排索引的物理文件。
单词词典
单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
单词词典是倒排索引中非常重要的组成部分,它是用来维护文档集合中所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件中的位置信息。在支持搜索时,根据用户的查询词,去单词词典里查询,就能够获得相应的倒排列表。
对于一个规模很大的文档集合来说,可能包含了几十万甚至上百万的不同单词,
快速定位某个单词直接决定搜索的响应速度,所以我们需要很高效的数据结构对单词词典进行构建和查找。
常用的数据结构包含哈希加链表和树形词典结构。