Lucene fdx 文件格式詳解

本文及后面關(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)容如下:

  1. 3fd7 6c17 固定頭MAGIC
  2. 1dLucene50StoredFieldsFastIndex長度29, 其中Lucene50StoredFieldsFast中的Fast代表data區(qū)采用Fast壓縮方式, Index這個代表是Index``文件懊亡,與data`文件相對應(yīng)
  3. 23個字節(jié)Lucene50StoredFieldsFastData
  4. 00 0000 01 4個字節(jié)的CompressingStoredFieldsWriter.VERSION_CURRENT
  5. 16個字節(jié)的segmentId, 這個是隨機生成的
  6. 00 segment suffix 長度 0
  7. 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ù))開始

fdxfdt文件映射關(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)注我的簡書桂对,一同進步甩卓!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蕉斜,隨后出現(xiàn)的幾起案子逾柿,更是在濱河造成了極大的恐慌,老刑警劉巖宅此,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件机错,死亡現(xiàn)場離奇詭異,居然都是意外死亡父腕,警方通過查閱死者的電腦和手機弱匪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來璧亮,“玉大人萧诫,你說我怎么就攤上這事≈λ唬” “怎么了帘饶?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長群扶。 經(jīng)常有香客問我及刻,道長镀裤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任缴饭,我火速辦了婚禮暑劝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茴扁。我一直安慰自己铃岔,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布峭火。 她就那樣靜靜地躺著毁习,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卖丸。 梳的紋絲不亂的頭發(fā)上纺且,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音稍浆,去河邊找鬼载碌。 笑死,一個胖子當著我的面吹牛衅枫,可吹牛的內(nèi)容都是我干的嫁艇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弦撩,長吁一口氣:“原來是場噩夢啊……” “哼步咪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起益楼,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤猾漫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后感凤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悯周,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年陪竿,在試婚紗的時候發(fā)現(xiàn)自己被綠了禽翼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡族跛,死狀恐怖捐康,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情庸蔼,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布贮匕,位于F島的核電站姐仅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掏膏,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一劳翰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馒疹,春花似錦佳簸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腥刹,卻和暖如春马胧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衔峰。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工佩脊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垫卤。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓威彰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親穴肘。 傳聞我的和親對象是個殘疾皇子歇盼,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355