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

图1:

Lucene 7.5.0 段的合并(四)

点击查看大图

生成IndexReaderWarmer

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

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

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

  固定的索引信息是哪些:

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

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

  为什么要生成IndexReaderWarmer:

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

 

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

相关文章:

  • 2021-08-24
  • 2021-08-06
  • 2021-10-22
  • 2021-08-27
  • 2021-09-14
  • 2022-12-23
  • 2022-12-23
  • 2021-08-18
猜你喜欢
  • 2021-06-01
  • 2021-07-27
  • 2021-11-29
  • 2021-06-19
  • 2021-06-08
  • 2021-11-20
相关资源
相似解决方案