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