- 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/
以上所述就是小编给大家介绍的《ElasticSearch 5.3源码学习 —— Segments_N 文件详解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- JDK SPI源码详解
- 【zookeeper源码】启动流程详解
- 详解RunLoop之源码分析
- 详解CopyOnWrite容器及其源码
- React Scheduler 源码详解(1)
- React Scheduler 源码详解(2)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
京东平台运营攻略(全彩)
京东商学院 / 电子工业出版社 / 2015-5 / 69.00元
2014 年年末,京东POP 开放平台的入驻商家已超过6 万,京东平台被广泛关注和认可的同时,在电商江湖中仍颇具神秘色彩。面对碎片化的信息,京东的店铺经营者及希望入驻京东的准商家们,对于在京东如何利用丰富的各类平台资源,搭建并运营京东店铺,一直很难找到全面而系统的资料。 《京东平台运营攻略(全彩)》由京东官方出品,动员了京东内部涉及第三方店铺业务线的众多部门,由多位业务精英参与撰写,保证了内......一起来看看 《京东平台运营攻略(全彩)》 这本书的介绍吧!