本文及后面關(guān)于Lucene的文章所采用的lucene 版本為8.1.0.
1. 什么是fdx文件
fdx
文件是fdt文件的索引. 當查詢到滿足條件的doc Id時灾而,如何能夠快速的通過docId定位到對應(yīng)的內(nèi)容呢傅事?Lucuce的做法是
- 首先加載
fdx
文件,拿到對應(yīng)數(shù)據(jù)在fdt
位置 - 加載
fdt
文件獲取對應(yīng)的數(shù)據(jù)
fdx
文件在Lucene中對應(yīng)的數(shù)據(jù)結(jié)構(gòu)為CompressingStoredFieldsWriter
2. fdx文件格式
fdx文件格式
說明:
每一個Block記錄128個chunk的索引信息(最后一個block中的chunk數(shù)可能少于128個), 不知道chunk結(jié)構(gòu)宪郊,請參考Lucene fdt 文件格式詳解
-
Chunk num in block
: block中chunk數(shù) -
Block Doc Base
: block的Doc Id base, 實際上也就是block中第一個chunk的base -
Doc Avg size
: Doc id 平均大小 -
Doc Id
: doc id 編碼值掂恕,采用IntPack編碼 -
Block fdt offset base
: 該Block所對應(yīng)數(shù)據(jù)在fdt的位置,即Block中第一個Chunk在fdt中的offset -
offset avg size
: offset 平均大小 -
offsets
: offsets 編碼, 采用IntPack編碼 -
Max position in fdt
: 最后一個Block最后一個chunk的在fdt結(jié)束位置
3. 測試代碼及結(jié)果
代碼請參考Lucene tim文件格式詳解的第三部分
4. 范例fdx文件內(nèi)容
fdx文件.png
5. fdx文件內(nèi)容分析
5.1 文件頭
文件頭部分主要內(nèi)容為標識此文件類型為Lucene50StoredFieldsFastIndex
, 源碼部分在CompressingStoredFieldsWriter
的120行弛槐,主要內(nèi)容如下:
-
3fd7 6c17
固定頭MAGIC -
1d
為Lucene50StoredFieldsFastIndex
長度29, 其中Lucene50StoredFieldsFast
中的Fast代表data區(qū)采用Fast壓縮方式,Index
這個代表是Index``文件懊亡,與
data`文件相對應(yīng) - 23個字節(jié)
Lucene50StoredFieldsFastData
-
00 0000 01
4個字節(jié)的CompressingStoredFieldsWriter.VERSION_CURRENT
- 16個字節(jié)的segmentId, 這個是隨機生成的
-
00
segment suffix 長度 0 -
02
即2, 指的是PackedInts.VERSION_CURRENT
5.2 fdx data 部分
-
01
該block的chunk數(shù) -
00
該block的docBase, 查看Lucene fdt 文件格式詳解可知, 第一個chunk的docBase恰好是0 -
00
doc Id 平均大小, 當block中的總的doc數(shù)為1時,平均大小直接設(shè)置成0乎串,否則按正常計算店枣,請參考CompressingStoredFieldsWriter
的第118行 -
01
bitsPerDocBase -
00
bitPack 對docId 編碼值
結(jié)果可以參考CompressingStoredFieldsIndexWriter
132行
該區(qū)主要分為兩個部分 -
3a
第一個doc在fdt中偏移大小, 請看上圖,3a
位置的值為00
, 查看Lucene fdt 文件格式詳解可知,這一位置恰好是第一個chunk在fdt
文件的起始位置 -
00
平均偏移大小 -
01
bitsPerStartPointer -
00
bitPack 對offset 編碼值
結(jié)果可以參考CompressingStoredFieldsIndexWriter
132行 -
00
固定值 -
70
在fdt文件中數(shù)據(jù)區(qū)的結(jié)束位置灌闺,即最后一個chunk最后一個doc的結(jié)束位置(不包括), 查看Lucene fdt 文件格式詳解, 這個值恰好是是chunk data結(jié)束, chunk meta(chunk 總個數(shù))開始
fdx
與fdt
文件映射關(guān)系如下:
fdx與fdt文件映射關(guān)系
5.3 footer區(qū)
footer區(qū)主要有以下內(nèi)容
-
c0 2893 e8
MAGIC值艰争,為header值的反碼 -
00 0000 00
固定4個字節(jié)int 值為0 -
0000 0000 565c f3f0
8個字節(jié)的CRC碼
覺得本文有幫助的話,請關(guān)注我的簡書桂对,一同進步甩卓!