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

索引(index)

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

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

图1:

Lucene 软删除 softDeletes(二)

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

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

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

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

图2:

Lucene 软删除 softDeletes(二)

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

图3:

Lucene 软删除 softDeletes(二)

  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

相关文章:

  • 2021-07-07
  • 2021-10-11
  • 2022-02-01
  • 2021-07-07
  • 2022-12-23
  • 2021-09-09
  • 2021-09-29
  • 2021-09-30
猜你喜欢
  • 2021-08-16
  • 2022-01-22
  • 2021-05-28
  • 2021-10-22
  • 2021-10-12
  • 2021-08-17
  • 2022-12-23
相关资源
相似解决方案