名词解释:
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 : 纪录删除的信息。