天天看點

lucene 4.6 之索引檔案格式

名詞解釋:

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 : 紀錄删除的資訊。

繼續閱讀