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 文件详解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Namo Webeditor5.5一看就懂.

Namo Webeditor5.5一看就懂.

吳聲毅 / 金禾資訊 / 20040214 / NT$ 169

一看就懂系列書全以初學者的角度切入,全書以STEP BY STEP方式撰寫,並以豐富的圖片搭配教學,在最後更加上日常生活實例運用講解,一路學來一氣呵成。為了增進學習的效率更採用高級紙品全彩印刷,這麼好的書,您還在等什麼,一看就懂系列書保證是您最佳入門學習好伙伴。 本書特色: 1、一看就懂:Step by Step操作詳盡說明、讓您一看就懂 2、精選範例:精彩實務範例生動活......一起来看看 《Namo Webeditor5.5一看就懂.》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

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

在线 XML 格式化压缩工具