solr segment合并的一些心得

简单写一下最近看到的一个问题。

问题:solr段合并的时候,DocID的逻辑上有些许变化,有些不再是段中的DocId加上偏移量。

定位:首先,solr的底层也都是调用的lucenne的代码,所以这一块就跟lucene没有什么区别。逻辑上数据是先写入缓存的,当达到阈值的时候开始持久化到磁盘中,写入新的段。由于段合并的逻辑,会判断相邻的10个段(举例)是否达到合并的要求,如果达到合并的要求,就会进行合并生成一个新的段。
参考过,Lucene 原理与代码分析完整版 如果想研究lucene的话,可以好好看看,写的很不错。不过可能由于版本太久,合并的逻辑进行了更改。新生成的newDocId不一定等于offset+oldDocId,每一段的DocId都是从0开始重新编排的,一个段也是一个独立的存在,在生成的索引文件目录中也可以看到。源代码的处理当时是,先判断是否有document是否被删除,如果删除就将后面的ID往前移,所以逻辑上还是有些变化的。源码后续再贴出来,在MergeState初始化的时候,就会定义这样的一个逻辑,存储在docMaps中。

不过有个问题是,我新导入的数据,好像并没有删除document的时候,也会有一些DocId发生了类似的变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值