如何优化solr索引。 我想优化我的 solr 索引,因为我尝试在 solrconfig.xml 中更改它的索引,但我想如何验证它们是否已优化以及索引优化涉及哪些内容。
开始前检查各个核心的尺寸。
开放1号航站楼:
watch -n 10 "du -sh /path to core/data/*"
打开终端2并执行:
curl http://hostname:8980/solr/<core>/update?optimize=true
更新您各自的核心名称,而不是“核心”。
您可以看到核心的大小将逐渐增加,大约是索引数据大小的两倍,然后突然减小。这将需要时间取决于您的 solr 数据。
例如,50G 索引数据激增近 90G,并下降至优化的 25G 数据。通常这个数据量需要30-45分钟。
我发现这是优化 Solr 索引的最简单方法。在我的上下文中,“优化”意味着合并所有索引段。
curl http://localhost:8983/solr/<core_name>/update -F stream.body=' <optimize />'
优化索引的方法有多种。 您可以触发 solr 基本脚本之一: http://wiki.apache.org/solr/SolrOperationsTools#optimize
您还可以在(完全)导入或添加新数据时设置
optimize=true
。
...或者简单地使用 optimize=true
触发提交
也许这对您的需求也很有趣: http://wiki.apache.org/solr/UpdateXmlMessages#A.22commit.22_and_.22optimize.22
通过优化认为它是forceMerge。优化操作重新组织核心(或每个分片)中的所有分段,并将它们合并为 1 个分段(默认为 1 个分段)
优化:可以在solrconfig.xml中指定MergePolicy,这样Solr就会自己合并Segment。手动触发优化 http://hostname:port/solr/
回答您下一个问题 - 如何验证优化是否完成?您可以检查 Solr UI 中的 Core/Shard Overview 选项卡,该选项卡将表示段的计数。您还可以验证优化前后 /data/index 文件夹中段的大小。
Optimize/forceMerge 表现更好,但操作仍然昂贵。
https://wiki.apache.org/solr/SolrPerformanceFactors#Optimization_Considerations:
“优化成本非常高,如果指数不断变化,轻微的性能提升不会持续太久。”
为了测试您所做的更改对索引的优化程度,只需编写自定义索引器并添加随机生成的内容即可。添加大量文档(500.000 或 1.000.000)并测量所需时间。
按照上面分享的文章,我为自己制作了一个自定义索引器,并成功将索引文档所需的时间优化了 80%。
当涉及到 Solr 核心/分片数据的优化时,只需运行如下命令即可:
curl http://hostname:8980/solr/<COLLECTION_NAME>/update?optimize=true'
但请注意,这并不是免费的 - 如果您有大量数据,您最终可能会在 Solr 节点上产生大量 I/O,并且该过程本身会花费大量时间。在大多数情况下,您希望从调整合并过程开始,而不是强制合并索引本身。
我在 Lucene/Solr 革命期间就该主题做了一次演讲 - 如果您想查看幻灯片,这里的视频是一个链接:https://sematext.com/blog/solr-optimize-is-对你来说不错-lucene-solr-revolution/
如果您有权访问 Solr 基于 Web 的 UI,则可以通过导航到要优化的核心来完成此操作,然后:
Request-Handler
设置为 /update
(这是默认值),并将文档类型设置为 XML
(这对于 JSON 来说可能是可行的,但是...)<optimize/>
这将启动优化过程。