这篇文章主要介绍“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。