首頁 > 軟體

Lucene fnm索引檔案格式原始碼解析

2023-03-15 06:02:13

簡介

字尾為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));

檔案結構全域性示意圖

欄位描述

Header

檔案頭部資訊,主要是包括:

  • 檔案頭魔數(同一lucene版本所有檔案相同)
  • 該檔案使用的codec名稱:Lucene90FieldInfos(codec可以理解成檔案的佈局格式,不同版本lucene相同字尾檔案有不一樣的版本格式)
  • codec版本
  • segment字尾名(一般為空)
  • segment id(也是Segment_N檔案中的N)

FieldCount

該索引的field總數

Field

記錄欄位的元資訊

FieldName 

欄位名稱,比如範例程式碼中的name,id,vector都是欄位名稱

FieldNumber 

欄位的編號

FieldBits

部分屬性的點陣圖資訊,是一個組合值,描述欄位是否具有以下屬性:

  • 是否儲存詞向量(termVector):0x1
  • 是否要忽略norm值:0x2
  • 是否帶有payload:0x4
  • 該欄位是否是軟刪除欄位(soft delete):0x8

範例程式碼中的name欄位的FieldBits的值為:0x1 | 0x2 | 0x4 = 0x7

IndexOptions

欄位的索引選項,表示在索引該欄位的時候儲存的倒排資訊有哪些,所有的型別:

  • 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型別的組合值,但是從原始碼看只儲存了docValue型別。

  • 0:NONE
  • 1:NUMERIC
  • 2:BINARY
  • 3:SORTED
  • 4:SORTED_SET
  • 5:SORTED_NUMERIC

DocValuesGen

可以理解為欄位DocValues的版本號,通過IndexWriter.updateDocValues(...)會更新該版本號

Attributes

可能的值有:

PointDimensionCount

如果欄位是IntPoint,LongPoint等型別,則記錄維數。

PointNumBytes

如果欄位是IntPoint,LongPoint等型別,則記錄每一維資料儲存需要的位元組個數。

VectorDimension

向量欄位記錄向量的維數

VectorSimilarityFunction

向量相似度衡量函數:

  • EUCLIDEAN:歐式距離
  • DOT_PRODUCT:點積
  • COSINE:consine距離

Footer

檔案尾,主要包括

  • 檔案尾魔數(同一個lucene版本所有檔案一樣)
  • 0
  • 校驗碼

以上就是Lucene fnm索引檔案格式原始碼解析的詳細內容,更多關於Lucene fnm索引檔案格式的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com