【发布时间】:2011-10-20 17:27:14
【问题描述】:
如何优化 solr 索引。 我想优化我的 solr 索引,因为我尝试在 solrconfig.xml 中更改它被索引但我想如何验证它们是否已优化以及索引优化涉及哪些内容。
【问题讨论】:
标签: java optimization jakarta-ee lucene solr
如何优化 solr 索引。 我想优化我的 solr 索引,因为我尝试在 solrconfig.xml 中更改它被索引但我想如何验证它们是否已优化以及索引优化涉及哪些内容。
【问题讨论】:
标签: java optimization jakarta-ee lucene solr
在开始之前检查各个核心的大小。
打开 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 分钟才能处理这么多数据。
【讨论】:
commit=true ?
我发现这是优化 Solr 索引的最简单方法。在我的上下文中,“优化”意味着合并所有索引段。
curl http://localhost:8983/solr/<core_name>/update -F stream.body=' <optimize />'
【讨论】:
您需要通过optimize=true更新solr请求以优化solr。
【讨论】:
有多种方法可以优化索引。 您可以触发 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。 Optimize操作重新组织一个Core(或每个shard)中的所有Segment并将它们合并为1个Segment(默认为1个segment)
优化:你可以在solrconfig.xml中指定MergePolicy,这样Solr会自己合并段。手动触发优化 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-not-bad-for-you-lucene-solr-revolution/
【讨论】: