名词解释:

document 包含一系列的fields

field是一系列terms的代号

term是一系列的bytes

 

倒排索引:

这个索引存储了关于这个term的一些统计,为什么叫做倒排索引,因为这个能够列出包含这个term的所有文档,这是正常关系的一个逆,正常关系是一个文档列出里面有哪些词。

 

fields的类型:

一个field能够被stored,如果这么设置,他会被保存到一个非倒排的索引中。

一个field会被用来切词以方便更好的索引。

 

segments:

apache的索引包含多个子索引,一个segment是全套的索引,可以被独立的搜索。

整个服务的索引会包含好几个 segments

 

documents号:

lucene使用一个号来识别每一个document,第一篇加到索引中的文档号是0,然后依次递增。

文档号是会变的,在一个segment中,每一个文档的文档号是唯一的。

 

索引结构概况:

segment_info: 包含这个segment的一些基本信息,比如这个segment中有多少篇文档。

Field name:纪录索引中有哪些field.

Stored field values: 保存store域的东西,比如,这些东西会随着每一次命中返回,可以被用文档号找到。

Term dictionary: 包含所有文档所有被索引的term的字典,这个字典同样包括有几个文档包括这个term,还有指针指向这个term的tf值和Term Proximity data。

Term Frequency data:  纪录有几篇文档包含这个term,还有这个term在这个文档中出现的频率。

Term Proximity data:纪录这个term 在这个文档中的位置。

Normalization factors: 用在打分公式中做归一化用的。

Term Vector: 一个term vector 包含这个term的文字内容和频率。

Per-document values:跟stored 字段一样, 这也是能够通过文档号来取道的,但是这里面的东西会被加载到内存中供快速读取。stored域一般是用来存储这个文档的简介的,用来展示,而per-document 会影响打分的一些因素。

Deleted document: 存储哪些文档被删除了。

 

文件后缀名解释:

1) Segments file: segments.gen 和 segment_N : 存储一次提交的信息。

2) Lock  File:  write.lock : 写锁,防止多个indexWriter 来写。

3) Segment_info: .si : 存储一个segment的元信息, 比如段中包含了哪些文件。

4) Fields : .fnm : 存储fields的一些信息,有多少域,每一个域的名称以及索引方式。

格式: version | field 数目 | field名字 field flag bit | ...... 

5) Field index : .fdx :  这个field的位置信息,即域索引文件 , 由于每个document保存的域信息都不一样,所以大小也不一样,需要索引文件来保存位置。

格式: field position |  field position |  field position | ......

6) Field Data :  .fdt :  存储stored field. 一共有 document size个项,每一项保存一篇文档的域信息。

格式: (field count | field num | markbit | field value)(field count | field num | markbit | field value).......

7) Term Dictionary : .tim : 存储term 的信息。具体文件格式首先是词的数量,设置词典中每隔interval个词保存在Term索引文件中,跳表的interval,最大层数等信息,词典本身应用了 prefix suffix技巧来节省存储空间。

格式: termcount | indexinterval | skipinterval | maxskiplevel | (prefixLength | suffix | FiendNum | DocFreq | reqDelta | proxDelta | skipDelta ) ......

8) Term  index : .tip : 存储term 的索引信息。即保存每隔indexInterval个词,indexTermCount = TermCount/IndexInterval .

格式: indexTermCount | skipinterval | skipinterval | maxskiplevel | (prefixLength | suffix | FiendNum | DocFreq | reqDelta | proxDelta | skipDelta | indexDelta 在词典中的偏移量 ) ......

9) Frequencies : .doc : 传说中的倒排表,共termcount项,每一项都有自己的倒排表,每个倒排表有两个部分,一部分是倒排表本身,还有一部分是skip list,为了更快的访问定位倒排表中的文档号和词频。每一个跳跃表包括以下信息,文档号,payload长度,在.doc中得偏移量,在pos中得偏移量。

10) Position : .pos : 存储在document中的位置信息,跟.doc中得倒排表有密切的关系。

格式: TermPositions | ..... | TermPositions 

TermPositions -> 第一篇文档 positions | 第N篇文档 positions .....

No N positons  -> positon | PayloadLength | Payload data   

11) Payloads : .pay : 存储额外的信息每一个位置信息的元数据和用户的payloads信息。

12) Norms : .nvd , .nvm :  编码存储打分因素。

13) Per-document values : .dvd, .dvm : 存储额外的打分信息和其他一些信息。

14) Term vector index : .tvx :  包含term offset 在文档文件中的信息, 词向量索引文件。有Document size个项,每一项有两个信息,第一项是tvd 中此文档的偏移, 第二项是doucument的第一个域在tvf 中此文档的偏移,

15) Term vector document : .tvd : 保存一个文档中有几个 term vector . 词向量文档文件,有Document size个项。

格式:  (num of field | fieldNumDelta | ......)....  

fieldNumDelta 存储的是这个域在相对于第一个域的偏移。

16) Term vector fields : .tvf :  保存所有的域,第几个域到第几个域是属于那篇文档,是由tvx 中的第一个域的偏移量以及tvd中 n-1 个域的偏移量来决定的。

格式: (numTerms | mark bit | TermText | TermFrequency | TermText | TermFrequency).....

17) Deleted document : .del : 纪录删除的信息。