ElasticSearch 5.3源码学习 —— Segments_N 文件详解

栏目: 编程工具 · 发布时间: 6年前

  • 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读取)

ElasticSearch 5.3源码学习 —— Segments_N 文件详解
序号 含义
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校验码

附录

  1. vint: 用1-5bit表示int,符号位表示是否结束(为0代表结束),后7位表示数值。低位在前高位在后
  2. generation在文件名中都是转成36进制
  3. SegmentInfos在readCommit时除了读取Segment_N,还会读取各segment的元文件获得maxID,在lucene62中为 .si 文件,下图标红处即为docNum,MaxDoc为63023 (Lucene62SegmentInfoFormat#read读取)
    ElasticSearch 5.3源码学习 —— Segments_N 文件详解
  4. 其实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 文件详解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Linux Command Line

The Linux Command Line

William E. Shotts Jr. / No Starch Press, Incorporated / 2012-1-17 / USD 39.95

You've experienced the shiny, point-and-click surface of your Linux computer-now dive below and explore its depths with the power of the command line. The Linux Command Line takes you from your very ......一起来看看 《The Linux Command Line》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具