本文使用 Lucene 代码版本:8.7.0
前言
本文学习一下。nvd 文件的格式与内容。
nvm 与 nvd 文件配合存储了索引中的标准化相关信息。其中 nvd 存储了真实的数据,比如当前 field 有值的所有 docId,以及他们的标准化值。
.nvd 文件整体结构
字段解释:
- Field: 一个 field 的所有标准化信息
- DocIDWIthField: 这个域有值的所有 docId 的集合。
- NormsData: 这个域的所有的标准化值。
相关写入代码分析
nvm 及 nvd 文件的写入全部在org.apache.lucene.codecs.lucene80.Lucene80NormsConsumer
类中。
初始化
在该类的构造函数中,进行了初始化及 Header 的写入。
addNormsField
在org.apache.lucene.codecs.lucene80.Lucene80NormsConsumer#addNormsField
中进行了全部的内容写入。
具体内容都在注释里,不再赘述。
所有的两块数据,分别在标志处写入。
)
与 nvm 文件内容的对应关系
看了这么多文件,想必我们也发现了。xxd 和 xxm 文件是对应的,在 xxm 文件中会存储 xxd 文件中的一些文件位置用来快速进行访问,在 nvm 和 nvd 文件中也不例外。具体的两个映射值如下图。
根据这张图, 可以比较直观的发现,在 nvm 中,将 nvd 文件中的两大块内容的起始文件地址都存储了下来,因此可以进行快速的随机访问。
结语
比较简单,罗列一下。
完。
联系我
最后,欢迎关注我的个人公众号【 呼延十 】,会不定期更新很多后端工程师的学习笔记。
也欢迎直接公众号私信或者邮箱联系我,一定知无不言,言无不尽。
以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
更多学习笔记见个人博客或关注微信公众号 < 呼延十 >——>呼延十