本文共 512 字,大约阅读时间需要 1 分钟。
简单写一下最近看到的一个问题。
问题:solr段合并的时候,DocID的逻辑上有些许变化,有些不再是段中的DocId加上偏移量。
定位:首先,solr的底层也都是调用的lucenne的代码,所以这一块就跟lucene没有什么区别。逻辑上数据是先写入缓存的,当达到阈值的时候开始持久化到磁盘中,写入新的段。由于段合并的逻辑,会判断相邻的10个段(举例)是否达到合并的要求,如果达到合并的要求,就会进行合并生成一个新的段。
参考过, 如果想研究lucene的话,可以好好看看,写的很不错。不过可能由于版本太久,合并的逻辑进行了更改。新生成的newDocId不一定等于offset+oldDocId,每一段的DocId都是从0开始重新编排的,一个段也是一个独立的存在,在生成的索引文件目录中也可以看到。源代码的处理当时是,先判断是否有document是否被删除,如果删除就将后面的ID往前移,所以逻辑上还是有些变化的。源码后续再贴出来,在MergeState初始化的时候,就会定义这样的一个逻辑,存储在docMaps中。不过有个问题是,我新导入的数据,好像并没有删除document的时候,也会有一些DocId发生了类似的变化。
转载地址:http://tpnws.baihongyu.com/