索引文件.fnm用来描述域信息(FieldInfo)
例子
为了便于介绍.fnm中的各个字段,给出下面的例子
图1:
fnm文件的数据结构
图2:
FieldsCount
FieldsCount描述的是.fnm中域的种类。
Field
图3:
FieldName
该字段描述的是域名,例如图1中的"author"、“content”、"abc"都是FieldName。
FieldNumber
域的编号,根据处理域的先后顺序,每个域都会获得一个从0开始递增的域的编号。
FieldBits
该字段是一个组合值,它用来描述当前域是否有以下的属性:
- 是否存储词向量(termVector):0x1,词向量的介绍可以看这里索引文件之tvx&&tvd
- 是否忽略域的norm值:0x2,用于域的打分的norm值的介绍可以看这里索引文件之nvd&&nvm
- 是否带有payload:0x4,payload的介绍可以看这里索引文件之pos&&pay
- 该域是否为软删除域(soft delete field):0x8,这个概念在后面的文档中会介绍
在图1中,域"content"的FieldBits的值为 (0x1 | 0x2 | 0x4) = 0x0111。
IndexOptions
该字段描述了当前域的索引选项(IndexOptions),哪些倒排信息会被写入到索引文件中。IndexOptions有以下值:
- 0:NONE
- 1:DOCS
- 2:DOCS_AND_FREQS
- 3:DOCS_AND_FREQS_AND_POSITIONS
- 4:DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS
DocValuesBits
该字段占用一个字节,其中高4个bit用来描述是否记录norm,低4个bit用来描述DocValues类型,DocValues的类型包括以下类型,在DocValues对每一种都已介绍,不赘述:
- 0:NONE
- 1:NUMERIC
- 2:BINARY
- 3:SORTED
- 4:SORTED_SET
- 5:SORTED_NUMERIC
DocValuesGen
该字段描述了DocValues类型的域的更新状态,比如我们调用IndexWriter.updateDocValues(…)方法后,那么DocValuesGen的值会变更,这里不展开介绍,在介绍IndexWriter时会详细介绍。
Attributes
该字段描述了存储当前域的索引文件的格式(format),比如说当前是一个DocValues的域,那么Attributes的字段会有下面的值:
- PerFieldDocValuesFormat.format:Lucene70
表示使用Lucene70这种格式来生成索引文件.dvd、.dvm。
DimensionCount
该字段描述的是如果域为点数据类型,那么DimensionCount的值为点数据的维度,点数据以及维度的概念在Bkd-Tree以及索引文件之dim&&dii介绍不赘述,在图1中,IntPoint域即为点数据域,DimensionCount的值为3,因为有3,5,9共三个值。
DimensionNumBytes
该字段描述的是每一个维度占用的字节个数(数值类型被编码为多个字节),同样已经在前面的文章中介绍了。
fnm文件的总数据结构
图4:
点击下载Markdown文档