Lucene4.3进阶开发之李代桃僵( 八)

上篇文章,散仙介绍了段文件格式的组成以及结构,那么本篇呢,我们来分析下.fnm这个文件 

这个文件存储的主要是域(Fileds)字段名,在索引文件中的后缀名为.fnm。 

下面先来看下.fnm的数据类型。 

Header--> CodecHeader 

FieldsCount-->VInt 

FieldName-->String 

FieldBits, DocValuesBits-->Byte 

FieldNumber-->VInt 

Attributes-->Map<String,String> 

DocValuesGen-->Int64 

详细描述如下: 

FieldsCount:记录的是域名在当前文件的数量 

FieldName:域名在文件中保存为UTF-8字符串 

FieldNumber:字段的编号, 

FieldBits:一个字节包含字段的选项信息 

(1)低阶位是1代表是索引字段,bit为0代表非索引(Indexs)字段 

(2)第二个低阶位是1代表有向量存储,bit为0代表无向量(term vectors)存储 

(3)第三个低阶位被设置成(0x4),offsets(偏移量)将会被存储在倒排链表里,除了位置信息 

(4)第四个bit位从未被使用过 

(5)第五个bit位被设置成(0x10),norm(加权基准)将会被忽略在索引字段里 

(6)第六个bit位被设置成(0x20),payload(载荷)将会被被存储在索引字段里 

(7)第七个bit位被设置成(0x40),term frequencies(词频) and positions(位置)将会在索引字段里被忽略 

(8)第八个bit位被设置成(0x80),positions(位置)信息,将不会被忽略在索引字段里 

DocValuesBits: 

一个字节包含每个文档的值类型,这个被记录用2个4位字节的int类型,高阶位代表(norms)加权基准的选项, 

低阶位代表DocValues的选项,每个4位字节的整数可以被解码: 

0:代表这个字段没有存储DocVlues 

1:数字类型的NumericDocValues 

2:二进制类型的BinaryDocValues 

3:排序类型的SortedDocValues 

DocValuesGen是字段的DocValues里面的数量,如果这个值为1,代表着 

没有DocValues更新该字段,其他任何大于0的数字代表其被更新存储通过DocValuesFormat. 

Attributes:一个K-V映射的编码的属性存储。 

DocValuesFormat:作用是为每个文档进行编码以及解码的工作,如果有自己定义的格式需要加入或扩展 

可以继承改类,为了能够使段文件读取,必须需要定义格式名,这个方法使用的是JAVA的SPI进行定义的 

,在扩展的类里面必须有一个无参的构造函数以确保SPI可以解析。 


你可能感兴趣的:(Lucene)