搜索引擎检索系统索引的核心是什么?
0. 一些说明

显然是反向索引。
好了,现在我们开始介绍反向索引部分。
0. 一些说明
反向索引分成两部分,如下图(图来自《信息检索导论》):

左面是词项词典(Term Dictionary),右边是倒排记录表(Posting)。
在Lucene中,词典和倒排是分开存储的,词典存储在.tii和.tis文件中,而倒排又分为两部分存储,第一部分是文档号和词频信息,存储在.frq中;另一部分是词的位置信息,存储在.prx文件中。
本章节将介绍.tii和.tis文件。
1. 索引文档集
在分析索引之前,需要对几篇文档进行索引。
去ChinaDaily上扒了三篇英文新闻,然后重新用索引程序对它们进行索引。
和前面几篇文章介绍的一样,也是对它们分成path,modified和contents三个域进行索引,分别索引他们的路径,最后修改时间以及内容。具体代码如下:
doc.add(new Field("path", f.getPath(), Field.Store.YES, Field.Index.NOT_ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS ));
doc.add(new Field("modified",
DateTools.timeToString(f.lastModified(), DateTools.Resolution.MINUTE),
Field.Store.YES, Field.Index.NOT_ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS));
doc.add(new Field("contents", br));
2. 词项词典索引(.tii,.tis)结构分析
2.1 作用
凡是存在的,必是合理的。
在分析结构之前,还是和之前一样,分析分析词典索引的作用吧。
其实,在这儿也没啥好分析的,囧。。因为要没词典的话,你还搜个毛。。。
只要但凡对搜索引擎索引的倒排结构稍有了解,就知道和搜索最相关的部分是反向索引,也即<词项ID->文档ID列表>的这么一个映射。
很难想象一个搜索引擎接到一个query词之后,对所有文档grep一遍来取出命中的文档,这得多慢。
当用户输入Query后,经过诸如大小写处理、分词、同义词处理、停用词去除等等等等一系列Query变换之后,最终会到词典中(此时词典已经由Lucene加载到内存了)中查询有无命中,如果有命中,就会取出它的词频和位置信息,这两个信息分别是存储在.frq和.prx的,而词典就会保存这个词的词频信息、位置信息在这两个文件中的地址。
这样,程序就能很快的从.frq和.prx倒排文件中取出该词项的信息,然后就可以开始根据这些信息进行打分、排序什么的了,最后将一系列匹配上的文档返回。完成检索。
2.2 词项词典(Term Dictionary)索引文件结构分析
它由两个文件组成,
1)