谈谈lucene的DocValues合并(BinaryField域的合并过程)

对于每个段都对应一个BinaryDocValuesSub,由一个DocMap与BinaryDocValues构成)。DocMap用于返回当前数据段中的docId对应到新段中的值:

由于BinaryDocValues没有IndexSort选项,因此只考虑以下两种情况:如果没有文档删除,每段中的文档ID在新生成的段中的ID=前一个段中的文档数量+当前段中的文档ID;如果某个数据段存在文档删除,例如有10篇文档,ID号为0-9(第1、5、8三篇文档被删除后)则重新变成:

而BinaryDocValues只需获取当前docID对应的值即可。