Lucene fnm索引文件格式源碼解析
簡(jiǎn)介
后綴為fnm文件是存儲(chǔ)索引的字段的元信息,包含字段名稱,字段類型,字段屬性等信息。
版本
lucene 9.1.0
涉及的主要類
fnm索引文件的生成源碼比較簡(jiǎn)單,不貼了,主要邏輯在:
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)文章
Java實(shí)現(xiàn)簡(jiǎn)單班級(jí)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單班級(jí)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02詳解Java的Hibernat框架中的Map映射與SortedMap映射
這篇文章主要介紹了Java的Hibernat框架中的Map映射與SortedMap映射,Hibernat是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12Java實(shí)現(xiàn)4種微信搶紅包算法(小結(jié))
微信紅包是大家經(jīng)常使用的,到現(xiàn)在為止仍然有很多紅包開發(fā)的需求,實(shí)現(xiàn)搶紅包算法也是面試常考題,本文就詳細(xì)的來介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2021-12-12springboot配置開發(fā)和測(cè)試環(huán)境并添加啟動(dòng)路徑方式
這篇文章主要介紹了springboot配置開發(fā)和測(cè)試環(huán)境并添加啟動(dòng)路徑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11如何實(shí)現(xiàn)java遞歸 處理權(quán)限管理菜單樹或分類
這篇文章主要介紹了如何實(shí)現(xiàn)java遞歸 處理權(quán)限管理菜單樹或分類,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01關(guān)于weblogic部署Java項(xiàng)目的包沖突問題的解決
這篇文章主要介紹了關(guān)于weblogic部署Java項(xiàng)目的包沖突問題的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01