Lucene 软删除 softDeletes(六)

我们接着文章软删除softDeletes(五)继续介绍合并策略SoftDeletesRetentionMergePolicy,在文章近实时搜索NRT(一)中使用方法三&&方法四获取StandardDirectoryReader和文章文档提交之flush(八)终中执行流程点更新ReaderPool的流程图时,会判断一个段中的文档是否都被删除(软删除跟硬删除),如果为真,那么这个段对应的索引文件,也就是索引信息将从索引目录中物理删除(如果没有其他reader占用的话),但是如果使用了合并策略SoftDeletesRetentionMergePolicy,那么上述的两个场景也不会删除这个段,我们通过下面的例子来展开介绍。

图1:

Lucene 软删除 softDeletes(六)

  图1完整的demo见:https://github.com/LuXugang/Lucene-7.5.0/blob/master/LuceneDemo8.4.0/src/main/java/io/softDeletes/SoftDeletesTest9.java 。

  图1中第62行执行了软删除的操作(红框),那么包含域名为"author"、域值为"D0"的文档将被软删除,故文档0将被标记为软删除的,同时添加了一篇新的文档newDoc,即文档1,随后第63行执行了硬删除(蓝色),那么newDoc也会被删除,最终在第64行执行commit()后,生成一个段,这个段中仅有的两篇文档都是被删除的。

  如果不使用该合并策略,即图1中useSoftMergePolice为false,那么由于这个段中所有的文档都是被删除的,故reader的两个方法numDoc()、maxDoc()都是0,同时索引目录中的索引文件如下所示:

看这里:https://www.amazingkoala.com.cn/Lucene/Index/2020/0709/153.html