Lucene4 索引格式(二) 元数据信息

正如前面(一)介绍过的,Lucene索引是按照index、segment、field、term的层级来组织存放索引的,那么索引文件肯定也会各个层级的元数据信息

1、segment的元数据

segments.gen, segments_N

索引中可用的段的信息都保存在segments_N文件中。索引中可能有一个或者多个segments_N文件,但是,N值最大的那个段才是可用的段(老的segments_N文件之所有存在,

是因为他们暂时不能被删除或者是某个writer正在进行写提交操作,又或者是一个定制的IndexDeletionPolicy正在使用当中)。segments_N文件描述了段的名字和一些关于索引

编码和删除的文档的细节。

segments.gen包含了索引中当前的段的年龄(就是_N)。这个文件只是简单地包含一个Int32的版本头和两个重复的Int64的年龄值。


文件详细格式

segments.gen:

GenHeader, Generation, Generation

GenHeader是一个Int32的数

Generation是一个Int64的数


segments_N: 

Header, Version, NameCounter, SegCount, <SegName, SegCodec, DelGen, DeletionCount, FieldInfosGen, UpdatesFiles>SegCount, CommitUserData, Checksum

Header是一个CodecHeader类型的数据,CodecHeader包含Uint32的魔术字Magic(值为1071082519)、String类型的编解码器名字CodecName(用来标识这个文件)、 Uint32

类型的版本号Version.

Version是一个 Int64的数,用来记录索引添加或者删除文档的次数

NameCounter是一个Int32的数,用来为新的段文件生成名字

SegCount是一个Int32的数,标识有多少个段。

SegName,String类型,就是段的名字,用来作为段文件中所有文件的文件名的前缀。

SegCodec,String类型,就是编码这个段的编解码器的名字。

DelGen是一个Int64的数,表示是.del文件的年龄。如果它是-1,就没有删除的文档。这个数如果大于0,就表示在LiveDocsFormat中保存有被删除的文档。

DeletionCount,Int32的数,记录了这个段中被删除文档的数量。

FieldInfosGen,Int64的数,记录了fieldInfos文件的年龄值。如果这个值是-1,表示这个段中的fieldInfos没有过更新。如果大于0,就表示FieldInfosFormat中保存有

fieldInfos的更新。

UpdatesFiles是一个Set<String>类型,保存在这个段中有过更新的文件。

CommitUserData是一个Map<String,String>,保存了一个用户提供的不透明的Map<String,String>,用来传给IndexWriter.setCommitData(java.util.Map)

Checksum是一个CRC32的检验值。


2、segment的元数据

一个段的元数据信息保存在.si文件中

.si文件的格式是Header,SegVersion,SegSize,IsCompoundFile,Diagnostics,Attributes,Files

Header是一个CodecHeader类型的数据,跟segments_N中的header类型一样。

SegVersion是一个String类型,标志这个段的版本值。

SegSize是一个Int32类型的数,标识这个段中文档的数量。

IsCompoundFile是一个Int8类型的数,标识这个段是不是用复合文件格式记录的。如果这个值是-1,表示这个段不是一个复合文件。如果是1,表示是一个复合文件。

Diagnostics是一个Map<String,String>,IndexWriter在生成每个段的时候,出于调度的目的,会写入一些信息到这个Map中,比如当前Lucene的版本、操作系统、

Java版本、本段生成的原因(合并、flush、新增),等等。

Attributes也是一个Map<String,String>,保存解编码器相关的键值对。

Files是一个Set<String>,本段所指向的文件列表。


3、field的元数据

一个段索引中,这个段里面所有field的名字都保存在这个段的.fnm文件中。

fnm文件的格式是Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,DocValuesGen,Attributes>FieldsCount

Header是一个CodecHeader类型的数据,跟segments_N中的header类型一样。

FieldsCount是一个VInt类型的数,记录这个文件中有多少个field.

FieldName,utf-8的String,field的名字

FieldNumber,VInt的数,标识field的序号。这个序号不像之前的version,field是显式地按照顺序编号的。

FieldBits,一个字节,用来标记字段的属性:

*最低位,1表示indexed, 0表示非indexed

*第二位,1表示保存有term向量,0表示没有

*第三位,1表示位置信息中会带有偏移量

*第四位,不用

*第五位,1表示indexed类型的field忽略掉规范因子

*第六位,1表示indexed类型的field保存负载

*第七位,1表示indexed类型的field忽略掉词频和位置信息

*第八位,1表示indexed类型的field忽略掉位置信息

DocValueBits:一个字节,包含的是单文档得分的类型。这个类型用2个4比特的整数记录,高位的比特用来表示norms选项,低位的比特用来表示DocValues选项。每个整数的意义是:

*0:此field没有DocValues

*1:数值型的 NumericDocValues

*2:二进制型的BinaryDocValues

*3:排序型的SortedDocValues

DocValuesGen,Int64类型的数,field的DocValues的年龄值。如果为-1,DocValues没有被更新过。此数大于0,表示DocValuesFormat中保存有更新。

Attributes, Map<String,String>类型,跟编解码相关的一些属性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值