概览
- Lucene当前活跃的Segment都会存在一个Segment Info文件里,也就是
segments_N
。若是有多个segments_N
,那么序号最大的就是最新的。
- segments_N用SegmentInfos进行操做
- segments_N由
Header, LuceneVersion, Version, NameCounter, SegCount, MinSegmentLuceneVersion, <SegName, HasSegID, SegID, SegCodec, DelGen, DeletionCount, FieldInfosGen, DocValuesGen, UpdatesFiles>SegCount, CommitUserData, Footer
这19个变量组成。
变量 |
类型 |
Header |
一个魔数(int),"segments"字符串和一个大版本(int)组成 |
LuceneVersion,MinSegmentLuceneVersion |
3个vint组成 |
NameCounter, SegCount, DeletionCount |
int32 |
Generation, Version, DelGen, Checksum, FieldInfosGen, DocValuesGen 为 |
long(int64) |
HasSegID |
int8 |
SegID |
16位byte |
SegName, SegCodec |
String |
CommitUserData |
Map<String,String> |
UpdatesFiles |
Map<Int32,Set> |
Footer |
魔数(int),algorithmID(int),CRC(long) |
文件实例(SegmentInfos#readCommit读取)
序号 |
含义 |
1 |
Magic Number 硬编码在lucene中,一直为0x3fd76c17 |
2 |
"segments"字符串,用于校验文件 |
3 |
version为6 |
4 |
Commit ID, 16位byte |
5 |
表示generation的string,这边是1e |
6 |
lucene具体版本,6.4.1 |
7 |
index version: 622,表示index修改了622次了 |
8 |
counter为0xf4 ,表示下一个segment序号为244 |
9 |
numSegments为8,表示一共有8个active segment |
10 |
segment里最小的lucene版本,为6.4.1 |
11 |
第一个segment name:_3d |
12 |
第一个byte表示有没有segID,若是为1,那么后面16位就是segID |
13 |
表示Codec,这里是Lucene62,用来找到对应segment的编码器,用于打开segment |
14 |
DelGen,删除文件序号,为-1表明尚未删除,对应文件{segname}_{delgen}.liv ,这里就是_3d_1.liv |
15 |
删除的doc数目 |
16 |
fieldInfosGen,为-1表明没有,对应文件{segname}_{delgen}.fnm |
17 |
docValuesGen |
18 |
读取一个String Set,第一个vint为长度,此处为0。而后读取一个int表明DocValuesUpdatesFiles的长度,此处为0,若是不为0,则是一个Map<Int32,Set> |
19 |
第二个segment的开头,由于一共有8个segment因此后面就重复上面的7遍 |
20 |
CommitUserData的长度,此处为3,表示后面有6个string,依次读取做为kv |
21 |
结尾魔数,是开头魔数的反码 |
22 |
algorithmID 此处为0 |
23 |
CRC校验码 |
附录
- vint: 用1-5bit表示int,符号位表示是否结束(为0表明结束),后7位表示数值。低位在前高位在后
- generation在文件名中都是转成36进制
- SegmentInfos在readCommit时除了读取Segment_N,还会读取各segment的元文件得到maxID,在lucene62中为
.si
文件,下图标红处即为docNum,MaxDoc为63023 (Lucene62SegmentInfoFormat#read读取)
- 其实Segment的这些数据在Rest API中均有展现,不过在5.3中不在一个api
// 得到当前Segments信息
GET /{index}/_segments
//得到CommitUserData
GET /{index}/_stats?filter_path=**.commit&level=shards
复制代码
版权声明
- 自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
- 本文首发于: http://czjxy881.coding.me/