本文使用Lucene代码版本: 8.7.0
前言
本文学习一下.pay文件的格式与内容。
pos文件中存储了每个term对应的payload信息,还有offset信息.
可以发现, 从文件内容,及文件复杂度上来讲.
doc > pos > pay.
- doc: doc文件中存储了term的所有docId及词频。此外还存储了跳跃信息,跳跃信息不仅帮助读取docId及词频,还记录了对应的pos/pay文件的文件位置,也可以辅助进行快速读取.
- pos: pos文件存储了term在doc中的位置信息,但是在最后一个变长int块中,帮pay文件存储了部分内容.
- pay: 比较单纯的记录整块的payload/offset信息.
.pay文件整体结构
其中的字段解释:
- IndexHeader: 索引头
- Term: 一个term的位置信息
- Footer: 索引尾.
- PackedIntBlock 一整个块(128个Doc)的payload/offset信息.
- payloadData: 有效载荷相关信息.
- offsetDate: 偏移量相关信息.
- payloadLength: payload的长度.
- payloadSumLength: payload的总数量.
- payloadValue: payload具体的字节信息.
- offsetStartDelta: term在doc中的偏移信息,采用增量编码.
- offsetLength: 偏移长度信息
相关写入代码分析
初始化
同样在构造函数中. org.apache.lucene.codecs.lucene84.Lucene84PostingsWriter#Lucene84PostingsWriter
.
PackedIntBlock写入
整块的写入在: org.apache.lucene.codecs.lucene84.Lucene84PostingsWriter#addPosition
中
结语
比较简单,罗列一下.
完。
联系我
最后,欢迎关注我的个人公众号【 呼延十 】,会不定期更新很多后端工程师的学习笔记。 也欢迎直接公众号私信或者邮箱联系我,一定知无不言,言无不尽。
欢迎转载,烦请署名并保留原文链接。
联系邮箱:huyanshi2580@gmail.com
更多学习笔记见个人博客或关注微信公众号 <呼延十 >——>呼延十