文章目录
一、前言
倒排索引是全文检索的根基,理解了倒排索引之后才能算是入门了全文检索领域。倒排索引的的概念很简单,也很好理解。但如你知道在全文检索领域Lucene可谓是独领风骚。所以你真的了解Lucene的倒排了吗?Lucene是如何实现这个结构的呢?
倒排索引如此重要,深入理解索引结构显然是非常有益的,对于理解Lucene的索引和搜索流程都非常关键,进而可以参与自定义搜索统计的计算函数扩展开发。
本文我们将对Lucene的倒排索引的实现原理和技术细节展开具体的研读和剖析。
二、理论
在学术上,倒排索引结构非常简明,非常好理解。如下
也许你已经很了解倒排索引了,下面这张图你也已经看过很多次了。本文将从你熟悉的部分开始,一步步深入去扣这张图的一个个细节。这里有二部分内容对应分别称之为:
- 索引,索引词表。倒排索引并不需要扫描整个文档集,而是对文档进行预处理,识别出文档集中每个词。
- 倒排表,倒排表中的每一个条目也可以包含词在文档中的位置信息(如词位置、句子、段落),这样的结构有利于实现邻近搜索。词频和权重信息,用于文档的相关性计算。
倒排索引由两部分组成,所有独立的词列表称为索引,词对应的一系列表统称为倒排表。
—— 来自《信息检索》
如图,整个倒排索引分两部分,左边是Term Dictionary,我们就叫Dictionary吧;右边是Postings List。
- 索引表,叫
Terms Dictionary
,是由于一系列的Term组成的。 - 倒排表,称
Postings List
,即是由所有的Term对应的Postings组成的。
实际上Lucene所用的信息信息检索方面的术语基本跟Information Retrieval(《信息检索》原版)保持一致。比如Term、Dictionary、Postings等。
首先,有必须解释一下,每个Segment中的每个字段(Field)都有这么一个结构,且相互独立。其次&#x