反向信息也就是反向索引,包括词典(Term Dictionary)和倒排表(Posting List)。这两部分分别存在 .tii
、.tis
和.frq
、prx
中。
词典
term 是根据 term’s field name 和 term text 进行字典排序。
IndexReader.open() -> DirectoryReader.open() -> new DirectoryReader() -> SegmentReader.get() -> new CoreReaders() -> new TermInfosReader() -> new SegmentTermEnum()
|
|
词典文件 .tis
tis属性 | 描述 |
---|---|
format | Lucene版本 |
size | 词典中包含 term 的数量 |
indexInterval | 为了加快 term 的查找速度,采用类似跳表的结构,在索引文件中 tii 中存储 term 的间隔 |
skipInterval | 倒排表无论是文档好、词频、位置信息等都是以跳表的结构存储的,skipInterval 是跳跃的步数。 |
maxSkipLevels | 跳表的最大层数 |
terminfo数组 | 每一项代表一个 term info,包括以前缀后缀规则存放的 text信息,term 所属的 域号 fieldNum,docFreq,term 在倒排表 frq/prx 中的偏移量(freqDelta、proxDelta),term 的倒排表的跳表在 frq 中的偏移量(skipDelta)。 |
词典索引文件 .tii
词典索引文件是会被全部加载到内存中去的。
tii属性 | 描述 |
---|---|
format | Lucene版本 |
size | 索引文件中包含的 term 数量,term count/indexInterval |
indexInterval | 同词典文件中的 indexInterval |
skipInterval | 同词典文件中的 skipInterval |
maxSkipLevels | 同词典文件中的 maxSkipLevels |
词频 .frq和位置 .prx
IndexReader.open() -> DirectoryReader.open() -> new DirectoryReader() -> SegmentReader.get() -> new CoreReaders()
词频
|
|
.frq
文件中存储的是文档号及词频信息。文档号及词频文件里面保存的是倒排表,是以跳跃表形式存在的。
- 此文件包含TermCount个项,每一个词都有一项,因为每一个词都有自己的倒排表。
- 对于每一个词的倒排表都包括两部分,一部分是倒排表本身,也即一个数组的文档号及词频,另一部分是跳跃表,为了更快的访问和定位倒排表中文档号及词频的位置。
- 对于文档号和词频的存储应用的是差值规则和或然跟随规则。
位置
|
|
词位置信息也是倒排表,也是以跳跃表形式存在的。
- 此文件包含TermCount个项,每一个词都有一项,因为每一个词都有自己的词位置倒排表。
- 对于每一个词的都有一个DocFreq大小的数组,每项代表一篇文档,记录此文档中此词出现的位置。这个文档数组也是和frq文件中的跳跃表有关系的。
- 对于每一篇文档,可能包含一个词多次,因而有一个Freq大小的数组,每一项代表此词在此文档中出现一次,则有一个位置信息。
- 每一个位置信息包含:PositionDelta(采用差值规则),还可以保存payload,应用或然跟随规则。
感谢:
http://www.cnblogs.com/forfuture1978/archive/2010/02/02/1661436.html