7

Lucene系列(13)索引格式之nvd文件

 3 years ago
source link: http://huyan.couplecoders.tech/lucene/%E6%90%9C%E7%B4%A2%EF%BC%8C%E7%B4%A2%E5%BC%95%E6%96%87%E4%BB%B6/2021/03/18/lucene%E7%B3%BB%E5%88%97(13)%E7%B4%A2%E5%BC%95%E6%A0%BC%E5%BC%8F%E4%B9%8Bnvd%E6%96%87%E4%BB%B6/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文使用 Lucene 代码版本:8.7.0

本文学习一下。nvd 文件的格式与内容。

nvm 与 nvd 文件配合存储了索引中的标准化相关信息。其中 nvd 存储了真实的数据,比如当前 field 有值的所有 docId,以及他们的标准化值。

.pay 文件整体结构

2021-03-18-21-52-19

字段解释:


  1. Field: 一个 field 的所有标准化信息

  1. DocIDWIthField: 这个域有值的所有 docId 的集合。
  2. NormsData: 这个域的所有的标准化值。

相关写入代码分析

nvm 及 nvd 文件的写入全部在org.apache.lucene.codecs.lucene80.Lucene80NormsConsumer类中。

在该类的构造函数中,进行了初始化及 Header 的写入。

2021-03-18-21-54-38

addNormsField

org.apache.lucene.codecs.lucene80.Lucene80NormsConsumer#addNormsField中进行了全部的内容写入。

具体内容都在注释里,不再赘述。

所有的两块数据,分别在标志处写入。

2021-03-18-21-57-12)

与 nvm 文件内容的对应关系

看了这么多文件,想必我们也发现了。xxd 和 xxm 文件是对应的,在 xxm 文件中会存储 xxd 文件中的一些文件位置用来快速进行访问,在 nvm 和 nvd 文件中也不例外。具体的两个映射值如下图。

2021-03-18-22-00-24

根据这张图, 可以比较直观的发现,在 nvm 中,将 nvd 文件中的两大块内容的起始文件地址都存储了下来,因此可以进行快速的随机访问。

比较简单,罗列一下。

最后,欢迎关注我的个人公众号【 呼延十 】,会不定期更新很多后端工程师的学习笔记。 也欢迎直接公众号私信或者邮箱联系我,一定知无不言,言无不尽。 %E6%89%AB%E7%A0%81_%E6%90%9C%E7%B4%A2%E8%81%94%E5%90%88%E4%BC%A0%E6%92%AD%E6%A0%B7%E5%BC%8F-%E6%A0%87%E5%87%86%E8%89%B2%E7%89%88.png

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:[email protected]

更多学习笔记见个人博客或关注微信公众号 < 呼延十 >——>呼延十




About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK