优化solr索引时如何限制合并段的数量?



我有一个很大的Solr搜索索引,包含许多段。我想合并它们以消耗更少的磁盘空间,并通过扫描更小的索引,通过在段合并期间从搜索中删除已删除的文档来加快搜索速度。

optimize的默认行为是合并所有的段,直到只剩下一个段。我想避免这种情况,并在剩下指定数量的片段时提前结束。否则合并可能会失败,内存不足的异常,当试图合并两个块大于可用的RAM。

首先让我们看一下磁盘上的索引段:

tomcat/solr/coreName/data/index$ ls -htlr --sort=size | grep .nvd

将输出按大小排序的索引段,因此您可以计算在停止合并时应该剩余多少段。合并总是从最小的块开始。

curl -X POST http://localhost:8080/solr/coreName/update -H "Content-Type: text/xml" --data-binary '<update> <optimize maxSegments="80"/> </update>'

将触发对索引的优化,根据solrConfig.xmlmergeFactor中配置的maxMergeAtOnce,将多个段合并为一个更大的结果。

maxSegments参数指定了当合并停止时应该剩余多少段。所以你可以在合并索引中最大的块之前停止。

确保发送包含更新XML<update> <optimize maxSegments="80"/> </update>的POST正文,用maxSegments参数集包装optimize命令。在GET请求中将参数作为查询参数发送将不起作用。

我还注意到我需要重新启动Solr来清理磁盘上旧的合并索引文件。在重新启动之前和合并成功之后,索引文件仍然存在于磁盘上。

最新更新