优化solr索引时如何限制合并段的数量?
How to limit the number of merged segments when optimising a solr index?
我有一个很大的 Solr 搜索索引,有很多段。我想合并它们以减少 space 在磁盘上的消耗,并通过扫描较小的索引来加快搜索速度,方法是在段合并期间从搜索中删除已删除的文档。
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.xml
中 mergeFactor
中配置的 maxMergeAtOnce
中的 maxMergeAtOnce
将多个段合并为一个更大的结果的索引触发优化。
maxSegments
参数指定当合并应该停止时应该剩下多少段。因此,您可以在合并索引的最大块之前停止。
确保发送包含更新 XML <update> <optimize maxSegments="80"/> </update>
的 POST 正文,并用 maxSegments
参数集包装 optimize
命令。在 GET 请求中将参数作为查询参数发送将不起作用。
我还注意到我需要重新启动 Solr 来清理磁盘上的旧合并索引文件。在重新启动之前和成功合并之后,索引文件仍然存在于磁盘上。
我有一个很大的 Solr 搜索索引,有很多段。我想合并它们以减少 space 在磁盘上的消耗,并通过扫描较小的索引来加快搜索速度,方法是在段合并期间从搜索中删除已删除的文档。
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.xml
中 mergeFactor
中配置的 maxMergeAtOnce
中的 maxMergeAtOnce
将多个段合并为一个更大的结果的索引触发优化。
maxSegments
参数指定当合并应该停止时应该剩下多少段。因此,您可以在合并索引的最大块之前停止。
确保发送包含更新 XML <update> <optimize maxSegments="80"/> </update>
的 POST 正文,并用 maxSegments
参数集包装 optimize
命令。在 GET 请求中将参数作为查询参数发送将不起作用。
我还注意到我需要重新启动 Solr 来清理磁盘上的旧合并索引文件。在重新启动之前和成功合并之后,索引文件仍然存在于磁盘上。