在文章软删除softDeletes(二)中介绍了软删除在索引(index)阶段的相关内容,我们接着介绍在flush/commit阶段的内容
flush/commit
在这个阶段,我们首先要介绍的是DWPT在转化为一个段的期间,即下图中用红框标注的流程点,跟软删除相关的内容:
图1:
点击查看大图
上图中,流程点将DWPT中收集的索引信息生成一个段newSegment
的介绍见文章文档提交之flush(三),注意的是,图1中的流程点基于版本为Lucene 7.5.0,但是软删除相关的处理时机点跟Lucene 8.4.0是一致的。
在红框标注的流程点处理软删除文档
中,统计了满足某个条件的文档的数量softDelCountOnFlush,这个条件是:文档中包含了DocValues(NumericDocValuesField或BinaryDocValuesField)的信息,并且DocValues的域名跟软删除的域是相同的(文档也有可能同时满足软删除的条件)。满足该条件的文档都被会认为是软删除的,在文章软删除softDeletes(一)中的第二个例子介绍了这种情况。
在红框标注的流程点处理软删除文档
中是如何找到所有满足这个条件的文档集合的:
在文章索引文件的生成(十五)之dvm&&dvd中,我们介绍了在索引阶段Lucene收集DocValues信息的过程,并且说到使用了DocsWithFieldSet对象收集了文档号,同时介绍了DocsWithFieldSet收集的过程,即每一个DocValues域都有一个DocsWithFieldSet对象,那么DocValues域的域名跟软删除的域如果相同的话,DocsWithFieldSet对象中文档的数量会添加到softDelCountOnFlush中。
接着在下图红框标注的流程点更新DocValues域
处理软删除的信息。
看这里: https://www.amazingkoala.com.cn/Lucene/Index/2020/0708/152.html