好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Lucene fnm索引文件格式源码解析

简介

后缀为fnm文件是存储索引的字段的元信息,包含字段名称,字段类型,字段属性等信息。

版本

lucene 9.1.0

涉及的主要类

fnm索引文件的生成源码比较简单,不贴了,主要逻辑在:

org.apache.lucene.codecs.lucene90.Lucene90FieldInfosFormat

代码示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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索引文件格式的资料请关注其它相关文章!

原文链接:https://juejin.cn/post/7202826051540828215

查看更多关于Lucene fnm索引文件格式源码解析的详细内容...

  阅读:14次