您好,登錄后才能下訂單哦!
這篇文章主要介紹“Lucene fnm索引文件格式是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Lucene fnm索引文件格式是什么”文章能幫助大家解決問題。
后綴為fnm文件是存儲索引的字段的元信息,包含字段名稱,字段類型,字段屬性等信息。
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));
文件頭部信息,主要是包括:
文件頭魔數(同一lucene版本所有文件相同)
該文件使用的codec名稱:Lucene90FieldInfos(codec可以理解成文件的布局格式,不同版本lucene相同后綴文件有不一樣的版本格式)
codec版本
segment后綴名(一般為空)
segment id(也是Segment_N文件中的N)
該索引的field總數
記錄字段的元信息
字段名稱,比如示例代碼中的name,id,vector都是字段名稱
字段的編號
部分屬性的位圖信息,是一個組合值,描述字段是否具有以下屬性:
是否存儲詞向量(termVector):0x1
是否要忽略norm值:0x2
是否帶有payload:0x4
該字段是否是軟刪除字段(soft delete):0x8
示例代碼中的name字段的FieldBits的值為:0x1 | 0x2 | 0x4 = 0x7
字段的索引選項,表示在索引該字段的時候存儲的倒排信息有哪些,所有的類型:
0:NONE
1:DOCS
2:DOCS_AND_FREQS
3:DOCS_AND_FREQS_AND_POSITIONS
4:DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS
官方文檔描述的是由norm和docValue類型的組合值,但是從源碼看只存儲了docValue類型。
0:NONE
1:NUMERIC
2:BINARY
3:SORTED
4:SORTED_SET
5:SORTED_NUMERIC
可以理解為字段DocValues的版本號,通過IndexWriter.updateDocValues(...)會更新該版本號
可能的值有:
如果字段是IntPoint,LongPoint等類型,則記錄維數。
如果字段是IntPoint,LongPoint等類型,則記錄每一維數據存儲需要的字節個數。
向量字段記錄向量的維數
向量相似度衡量函數:
EUCLIDEAN:歐式距離
DOT_PRODUCT:點積
COSINE:consine距離
文件尾,主要包括
文件尾魔數(同一個lucene版本所有文件一樣)
0
校驗碼
關于“Lucene fnm索引文件格式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。