- 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)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
About Face 3
Alan Cooper、Robert Reimann、David Cronin / John Wiley & Sons / 2007-5-15 / GBP 28.99
* The return of the authoritative bestseller includes all new content relevant to the popularization of how About Face maintains its relevance to new Web technologies such as AJAX and mobile platforms......一起来看看 《About Face 3》 这本书的介绍吧!
UNIX 时间戳转换
UNIX 时间戳转换
正则表达式在线测试
正则表达式在线测试