Lucene fnm索引文件格式源碼解析
簡介
后綴為fnm文件是存儲(chǔ)索引的字段的元信息,包含字段名稱,字段類型,字段屬性等信息。
版本
lucene 9.1.0
涉及的主要類
fnm索引文件的生成源碼比較簡單,不貼了,主要邏輯在:
org.apache.lucene.codecs.lucene90.Lucene90FieldInfosFormat
代碼示例
FieldType fieldType = new FieldType();
fieldType.setStored(true);
fieldType.setStoreTermVectors(true);
fieldType.setStoreTermVectorOffsets(true);
fieldType.setStoreTermVectorPositions(true);
fieldType.setStoreTermVectorPayloads(true);
fieldType.setTokenized(true);
fieldType.setOmitNorms(true);
fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
Document doc = new Document();
doc.add(new Field("name", "maria", fieldType));
doc.add(new SortedDocValuesField("name", new BytesRef("maria")));
doc.add(new IntPoint("id", 1, 2, 3));
doc.add(new KnnVectorField("vector", new float[]{1.1f, 2.2f, 3.3f}, VectorSimilarityFunction.COSINE));
文件結(jié)構(gòu)全局示意圖

字段描述
Header
文件頭部信息,主要是包括:
- 文件頭魔數(shù)(同一lucene版本所有文件相同)
- 該文件使用的codec名稱:Lucene90FieldInfos(codec可以理解成文件的布局格式,不同版本lucene相同后綴文件有不一樣的版本格式)
- codec版本
- segment后綴名(一般為空)
- segment id(也是Segment_N文件中的N)
FieldCount
該索引的field總數(shù)
Field
記錄字段的元信息
FieldName
字段名稱,比如示例代碼中的name,id,vector都是字段名稱
FieldNumber
字段的編號(hào)
FieldBits
部分屬性的位圖信息,是一個(gè)組合值,描述字段是否具有以下屬性:
- 是否存儲(chǔ)詞向量(termVector):0x1
- 是否要忽略norm值:0x2
- 是否帶有payload:0x4
- 該字段是否是軟刪除字段(soft delete):0x8
示例代碼中的name字段的FieldBits的值為:0x1 | 0x2 | 0x4 = 0x7
IndexOptions
字段的索引選項(xiàng),表示在索引該字段的時(shí)候存儲(chǔ)的倒排信息有哪些,所有的類型:
- 0:NONE
- 1:DOCS
- 2:DOCS_AND_FREQS
- 3:DOCS_AND_FREQS_AND_POSITIONS
- 4:DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS
DocValuesBits
官方文檔描述的是由norm和docValue類型的組合值,但是從源碼看只存儲(chǔ)了docValue類型。
- 0:NONE
- 1:NUMERIC
- 2:BINARY
- 3:SORTED
- 4:SORTED_SET
- 5:SORTED_NUMERIC
DocValuesGen
可以理解為字段DocValues的版本號(hào),通過IndexWriter.updateDocValues(...)會(huì)更新該版本號(hào)
Attributes
可能的值有:

PointDimensionCount
如果字段是IntPoint,LongPoint等類型,則記錄維數(shù)。
PointNumBytes
如果字段是IntPoint,LongPoint等類型,則記錄每一維數(shù)據(jù)存儲(chǔ)需要的字節(jié)個(gè)數(shù)。
VectorDimension
向量字段記錄向量的維數(shù)
VectorSimilarityFunction
向量相似度衡量函數(shù):
- EUCLIDEAN:歐式距離
- DOT_PRODUCT:點(diǎn)積
- COSINE:consine距離
Footer
文件尾,主要包括
- 文件尾魔數(shù)(同一個(gè)lucene版本所有文件一樣)
- 0
- 校驗(yàn)碼
以上就是Lucene fnm索引文件格式源碼解析的詳細(xì)內(nèi)容,更多關(guān)于Lucene fnm索引文件格式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
優(yōu)化Java內(nèi)存管理來防止“GC”錯(cuò)誤的方法詳解
垃圾回收(GC)是 Java 中的一個(gè)重要機(jī)制,它可以管理內(nèi)存并回收不再使用的對(duì)象所占用的資源,在本文中,我們將探討一些技巧,幫助您避免這一錯(cuò)誤,確保您的 Java 應(yīng)用程序順利運(yùn)行,需要的朋友可以參考下2023-11-11
如何使用RequestHeaders添加自定義參數(shù)
這篇文章主要介紹了使用RequestHeaders添加自定義參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-02-02
Java實(shí)現(xiàn)從Html文本中提取純文本的方法
今天小編就為大家分享一篇Java實(shí)現(xiàn)從Html文本中提取純文本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Java實(shí)現(xiàn)雙保險(xiǎn)線程的示例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)雙保險(xiǎn)線程的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
SpringBoot+Druid開啟監(jiān)控頁面的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot+Druid開啟監(jiān)控頁面的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06

