日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

lucene-索引文件格式

系統(tǒng) 2822 0

索引文件結(jié)構(gòu)

Lucene 使用文件擴(kuò)展名標(biāo)識不同的索引文件,文件名標(biāo)識不同版本或者代( generation )的索引片段( segment )。如 .fnm 文件存儲域 Fields 名稱及其屬性, .fdt 存儲文檔各項域數(shù)據(jù), .fdx 存儲文檔在 fdt 中的偏移位置即其索引文件, .frq 存儲文檔中 term 位置數(shù)據(jù), .tii 文件存儲 term 字典, .tis 文件存儲 term 頻率數(shù)據(jù), .prx 存儲 term 接近度數(shù)據(jù), .nrm 存儲調(diào)節(jié)因子數(shù)據(jù),另外 segments_X 文件存儲當(dāng)前最新索引片段的信息,其中 X 為其最新修改版本, segments.gen 存儲當(dāng)前版本即 X 值,這些文件的詳細(xì)介紹上節(jié)已說過了。

下面的圖描述了一個典型的 lucene 索引文件列表:

?

lucene-索引文件格式

如果將它們的關(guān)系劃成圖則如下所示:

?

lucene-索引文件格式

這些文件中存儲數(shù)據(jù)的詳細(xì)結(jié)構(gòu)是怎樣的呢,下面幾個小節(jié)逐一介紹它們,熟悉它們的結(jié)構(gòu)非常有助于優(yōu)化 Lucene 的查詢和索引效率和存儲空間等。

?

?

3.2 每個 Index包含的單個文件

下面幾節(jié)介紹的文件存在于每個索引 index 中,并且只有一份。

3.2.1 Segments文件

?

索引中活動( active )的 Segments 被存儲在 segment info 文件中, segments_N ,在索引中可能會包含一個或多個 segments_N 文件。然而,最大一代的那個文件( the one with largest generation )是活動的片斷文件(這時更舊的 segments_N 文件依然存在( are present )是因為它們暫時( temporarily )還不能被刪除,或者,一個 writer 正在處理提交請求( in the process of committing ),或者一個用戶定義的( custom IndexDeletionPolicy 正被使用)。這個文件按照名稱列舉每一個片斷( lists each segment by name ),詳細(xì)描述分離的標(biāo)準(zhǔn)( seperate norm )和要刪除的文件( deletion files ),并且還包含了每一個片斷的大小。

?

2.1 版本來說,還有一個文件 segments.gen 。這個文件包含了該索引中當(dāng)前生成的代( current generation )( segments_N 中的 _N )。這個文件僅用于一個后退處理( fallback )以防止( in case )當(dāng)前代( current generation )不能被準(zhǔn)確地( accurately )通過單獨(dú)地目錄文件列舉( by directory listing alone )來確定( determened )(由于某些 NFS 客戶端因為基于時間的目錄( time-based directory )的緩存終止( cache expiration )而引起)。這個文件簡單地包含了一個 int32 的版本頭( version header )( SegmentInfos.FORMAT_LOCKLESS=-2 ),遵照代的記錄( followed by the generation recorded )規(guī)則,對 int64 來說會寫兩次( write twice )。

?

版本

包含的項

數(shù)目

類型

描述

2.1 之前版本

Format

1

Int32

Lucene1.4 中為 -1 ,而在 Lucene 2.1 中為 -3 SegmentsInfos.FORMAT_SINGLE_NORM_FILE

Version

1

Int64

統(tǒng)計在刪除和添加文檔時,索引被更改了多少次。

NameCounter

1

Int32

用于為新的片斷文件生成新的名字。

SegCount

1

Int32

片斷的數(shù)目

SegName

SegCount

String

片斷的名字,用于所有構(gòu)成片斷索引的文件的文件名前綴。

SegSize

SegCount

Int32

包含在片斷索引中的文檔的數(shù)目。

2.1 及之后版本

Format

1

Int32

Lucene 2.1 Lucene 2.2 中為 -3 SegmentsInfos.FORMAT_SINGLE_NORM_FILE

Version

1

Int64

同上

NameCounter

1

Int32

同上

SegCount

1

Int32

同上

SegName

SegCount

String

同上

SegSize

SegCount

Int32

同上

DelGen

SegCount

Int64

為分離的刪除文件的代的數(shù)目( generation count of the separate deletes file ),如果值為 -1 ,表示沒有分離的刪除文件。如果值為 0 ,表示這是一個 2.1 版本之前的片斷,這時你必須檢查文件是否存在 _X.del 這樣的文件。任意大于 0 的值,表示有分離的刪除文件,文件名為 _X_N.del

HasSingleNormFile

SegCount

Int8

該值如果為 1 ,表示 Norm 域( field )被寫為一個單一連接的文件( single joined file )中(擴(kuò)展名為 .nrm ),如果值為 0 ,表示每一個 field norms 被存儲為分離的 .fN 文件中,參考下面的“標(biāo)準(zhǔn)化因素( Normalization Factors )”

NumField

SegCount

Int32

表示 NormGen 數(shù)組的大小,如果為 -1 表示沒有 NormGen 被存儲。

NormGen

SegCount * NumField

Int64

記錄分離的標(biāo)準(zhǔn)文件( separate norm file )的代( generation ),如果值為 -1 ,表示沒有 normGens 被存儲,并且當(dāng)片斷文件是 2.1 之前版本生成的時,它們?nèi)勘患僭O(shè)為 0 assumed to be 0 )。而當(dāng)片斷文件是 2.1 及更高版本生成的時,它們?nèi)勘患僭O(shè)為 -1 。這時這個代( generation )的意義與上面 DelGen 的意義一樣。

IsCompoundFile

SegCount

Int8

記錄是否該片斷文件被寫為一個復(fù)合的文件,如果值為 -1 表示它不是一個復(fù)合文件( compound file ),如果為 1 則為一個復(fù)合文件。另外如果值為 0 ,表示我們需要檢查文件系統(tǒng)是否存在 _X.cfs

2.3

Format

1

Int32

Lucene 2.3 中為 -4 (SegmentInfos.FORMAT_SHARED_DOC_STORE)

Version

1

Int64

同上

NameCounter

1

Int32

同上

SegCount

1

Int32

同上

SegName

SegCount

String

同上

SegSize

SegCount

Int32

同上

DelGen

SegCount

Int64

同上

DocStoreOffset

1

Int32

如果值為 -1 則該 segment 有自己的存儲文檔的 fields 數(shù)據(jù)和 term vectors 的文件,并且 DocStoreSegment, DocStoreIsCompoundFile 不會存儲。在這種情況下,存儲 fields 數(shù)據(jù)( *.fdt *.fdx 文件)以及 term vectors 數(shù)據(jù)( *.tvf *.tvd *.tvx 文件)的所有文件將存儲在該 segment 下。另外, DocStoreSegment 將存儲那些擁有共享的文檔存儲文件的 segment DocStoreIsCompoundFile 值為 1 如果 segment 存儲為 compound 文件格式(如 .cfx 文件),并且 DocStoreOffset 值為那些共享文檔存儲文件中起始的文檔編號,即該 segment 的文檔開始的位置。在這種情況下,該 segment 不會存儲自己的文檔數(shù)據(jù)文件,而是與別的 segment 共享一個單一的數(shù)據(jù)文件集。

[DocStoreSegment]

1

String

如上

[DocStoreIsCompoundFile]

1

Int8

如上

HasSingleNormFile

SegCount

Int8

同上

NumField

SegCount

Int32

同上

NormGen

SegCount * NumField

Int64

同上

IsCompoundFile

SegCount

Int8

同上

2.4 及以上

Format

1

Int32

Lucene 2.4 中為 -7 (SegmentInfos.FORMAT_HAS_PROX)

Version

1

Int64

同上

NameCounter

1

Int32

同上

SegCount

1

Int32

同上

SegName

SegCount

String

同上

SegSize

SegCount

Int32

同上

DelGen

SegCount

Int64

同上

DocStoreOffset

1

Int32

同上

[DocStoreSegment]

1

String

同上

[DocStoreIsCompoundFile]

1

Int8

同上

HasSingleNormFile

SegCount

Int8

同上

NumField

SegCount

Int32

同上

NormGen

SegCount * NumField

Int64

同上

IsCompoundFile

SegCount

Int8

同上

DeletionCount

SegCount

Int32

記錄該 segment 中刪除的文檔數(shù)目

HasProx

SegCount

Int8

值為 1 表示該 segment 中至少一個 fields omitTf 設(shè)置為 false ,否則為 <span style="font-size: 10pt; font-family:

lucene-索引文件格式


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 巢湖市| 凯里市| 花垣县| 五大连池市| 治县。| 吴桥县| 扎赉特旗| 宽甸| 澎湖县| 夏邑县| 宜良县| 康定县| 原阳县| 兴隆县| 宝山区| 金平| 万山特区| 达拉特旗| 恭城| 佛坪县| 张家港市| 巨鹿县| 兰溪市| 云浮市| 磐安县| 稷山县| 桂东县| 新密市| 西宁市| 都江堰市| 东丽区| 昭觉县| 那曲县| 新安县| 龙泉市| 灵山县| 宣威市| 南岸区| 克山县| 芦溪县| 开平市|