Lucene 软删除 softDeletes(二)

在文章软删除softDeletes(一)中我们介绍了软删除的一些应用,从本篇文章开始,将根据索引(index)、flush/commit、段的合并、搜索这几个不同的阶段来介绍跟软删除相关的内容。

索引(index)

  阅读本小结内容必须掌握文章文档的增删改(下)(part 2)中的知识点,故下文中出现的一些名词不会作详细的介绍

  索引(index)这个阶段,即文档的增删改的阶段,由于软删除属于删除操作,故对应的删除信息会被添加到全局的deleteQueue中,deleteQueue中存放了四种类型的删除信息,这四种删除信息用下图中的Node对象来描述:

图1:

  上图中的四种删除信息通过IndexWriter类中提供的方法生成:

  • QueryArrayNode:deleteDocuments(Querys)
  • TermArrayNode:deleteDocuments(Terms)
  • DocValuesUpdatesNode:updateBinaryDocValue( )、updateNumericDocValue( )、updateDocValues( )、softUpdateDocument( )、softUpdateDocuments( )
  • TermNode:updateDocument(Term, Document)、updateDocuments( Term, Documents)

  由上文可以看出,软删除对应的删除信息将会由DocValuesUpdatesNode来描述,

我们通过一个例子来看下DocValuesUpdatesNode中描述了哪些删除信息:

图2:

  图2中,第56行执行了软删除的操作,它对应的删除信息DocValuesUpdatesNode包含如下信息:

图3:

  DocValuesUpdatesNode中包含了两个对象:next、item,其中next用来指向deleteQueue中下一个删除信息(见文章文档的增删改(下)(part 2)),item(NumericDocValuesUpdate对象)中的type描述了使用NUMERIC类型的DocValues来描述被软删除的文档,item中的term描述了满足被软删除的文档的条件,即包含域名为"abc"、域值为"document3"的文档都会被软删除。

  上述DocValuesUpdatesNode的信息我们可以看出,我们获得了满足软删除的条件,但是没有指出软删除的作用范围(作用域),例如在图2中,文档3也满足被软删除的条件,但是这篇文档是在第56行的软删除操作之后添加的,那么这次的软删除不能作用(apply)到这篇文档,即这次的软删除操作只能对文档1生效,故我们还需要根据DocValuesUpdatesNode的信息进一步完善删除信息,即添加软删除的作用范围,不同的删除信息在完善删除信息后用下列的容器来描述(Lucene 7.5.0):

  • Map<Term,Integer> deleteTerms :TermArrayNode、TermNode
  • Map<Query,Integer> deleteQueries:QueryArrayNode
  • Map<String,LinkedHashMap<Term,NumericDocValuesUpdate>> numericUpdates:DocValuesUpdatesNode
  • Map<String,LinkedHashMap<Term,BinaryDocValuesUpdate>> binaryUpdate:DocValuesUpdatesNode

  BufferedUpdates类、deleteTerms、deleteQueries的内容在文章文档的增删改(下)(part 2)中已经作出了介绍,不赘述。

  如果DocValuesUpdatesNode中item中的type为NUMERIC,那么对应生成numericUpdates,如果item中的type为BINARY,那么对应生成binaryUpdate。

 

看这里:https://www.amazingkoala.com.cn/Lucene/Index/2020/0621/149.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值