Lucene 7.5.0 段的合并(四)

mac2024-04-22  7

本文承接执行段的合并(三),继续介绍执行段的合并的剩余的流程,下面先给出执行段的合并的流程图:

图1:

点击查看大图

生成IndexReaderWarmer

  在前面流程中我们了解到,合并后生成的新段已经包含了所有固定的索引信息及部分删除信息,故在当前流程点,我们可以生成该段对应的SegmentReader对象,并将该对象添加到ReadPool(见执行段的合并(二))中,这便是生成IndexReaderWarmer的过程。

  删除信息包括了被删除的文档号跟变更的DocValues信息。

  SegmentReader对象中包含的内容在SegmentReader系列文章中介绍,不赘述

  固定的索引信息是哪些:

索引文件.nvd、.nvm、.pos、.pay、.doc、.tim、.tip、.dim、.dii、.tvx、.tvd、.fdx、.fdt中包含的信息

  为什么是包含了部分删除信息:

执行段的合并是Lucene安排一个新的线程执行的并发操作,在合并的过程中,其他执行文档增删改的线程可能生成了新的删除信息,并且新的删除信息会在随后提交合并的流程中作用当前的新段

  为什么要生成IndexReaderWarmer:

首先要说的是,在合并阶段生成IndexReaderWarmer需要通过IndexWriterConfig.setMergedSegmentWarmer()方法设置,默认不使用该功能由于执行段的合并是并发操作,使得可以并发的提前读取新段的内容,即获得SegmentReader对象(生成IndexReaderWarmer的主要目的),其他线程执行近实时搜索NRT时就无需等待合并操作结束后再去获得SegmentReader对象,要知道获得SegmentReader对象的过程是I/O操作,故可以降低NRT搜索的延迟

 

看这里:https://www.amazingkoala.com.cn/Lucene/Index/2019/1030/104.html

最新回复(0)