反向索引包括两部分,左面是词典(Term Dictionary),右面是倒排表(Posting List)。
在 Lucene 中,这两部分是分文件存储的,词典是存储在 tii,tis中的,倒排表又包括两部分,
一部分是文档号及词频,保存在 frq中,一部分是词的位置信息,保存在 prx中。
Term Dictionary (tii, tis)
Frequencies (.frq)
Positions (.prx)
词典(tis)及词典索引(tii)信息格式如下:
在词典中,所有的词是按照字典顺序排序的。
1. 词典文件(tis)
1)TermCount:词典中包含的总的词数
2)IndexInterval:为了加快对词的查找速度,也应用类似跳跃表的结构,假设IndexInterval 为 4,则在词典索引(tii)文件中保存第 4 个,第 8 个,第 12 个词,这
样可以加快在词典文件中查找词的速度。
3)SkipInterval:倒排表无论是文档号及词频,还是位置信息,都是以跳跃表的结构存
在的,SkipInterval是跳跃的步数。
4)MaxSkipLevels:跳跃表是多层的,这个值指的是跳跃表的最大层数。
5)TermCount个项的数组,每一项代表一个词,对于每一个词,以前缀后缀规则存放词的文本信息(PrefixLength + Suffix),词属于的域的域号(FieldNum),有多少篇文档
包含此词(DocFreq),此词的倒排表在 frq,prx中的偏移量(FreqDelta, ProxDelta),此词的倒排表的跳跃表在 frq 中的偏移量(SkipDelta),这里之所以用 Delta,是应用差
值规则。
2.词典索引文件(tii)
1) 词典索引文件是为了加快对词典文件中词的查找速度,保存每隔 IndexInterval 个词。
2)词典索引文件是会被全部加载到内存中去的。
3)IndexTermCount = TermCount / IndexInterval:词典索引文件中包含的词数。
4)IndexInterval同词典文件中的 IndexInterval。
5)SkipInterval同词典文件中的 SkipInterval。
6)MaxSkipLevels同词典文件中的 MaxSkipLevels。
7)IndexTermCount个项的数组,每一项代表一个词,每一项包括两部分,第一部分是词本身(TermInfo),第二部分是在词典文件中的偏移量(IndexDelta)。假设IndexInterval为4,此数组中保存第4 个,第8个,第 12个词。