博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
solr segment合并的一些心得
阅读量:4298 次
发布时间:2019-05-27

本文共 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/

你可能感兴趣的文章
《C陷阱与缺陷》读书笔记
查看>>
相同程序不同进程下实现数据共享
查看>>
不同进程通过共享内存实现数据共享
查看>>
C++之POD数据类型
查看>>
C++中的struct与class
查看>>
C++之const关键字
查看>>
C++之函数返回指针
查看>>
C++之extern关键字
查看>>
C++之static关键字[转]
查看>>
类中成员函数的重载、覆盖与隐藏[转]
查看>>
C++之this指针
查看>>
C++之引用类型
查看>>
C++之virtual关键字
查看>>
C++之强制转换运算符[转]
查看>>
text段、data段、bss段、堆和栈
查看>>
OSI七层网络模型
查看>>
TCP协议
查看>>
git常用命令
查看>>
git与svn的五个基本区别[转]
查看>>
HTTP协议[转]
查看>>