如何优化solr索引。我想优化我的solr索引,因为我试图在solrconfig.xml中更改它的索引,但我想如何验证它们是否被优化,以及索引优化中涉及到哪些内容。
wljmcqd81#
在开始之前,请检查相应芯的尺寸。打开端子1:
watch -n 10 "du -sh /path to core/data/*"
打开2号航站楼并执行:
curl http://hostname:8980/solr/<core>/update?optimize=true
而不是“核心”,更新您各自的核心名称。你可以看到核心的大小会逐渐增加,大约是索引数据的两倍,然后会突然减少。这需要的时间取决于你的solr数据。例如,50 G的索引数据峰值接近90 G,然后唐斯到优化的25 G数据。通常,这一数据量需要30- 45分钟。为什么当我删除文档时,索引目录没有立即变小?强制合并?优化?
pqwbnv8z2#
我发现这是优化Solr索引最简单的方法。在我的上下文中,“优化”意味着合并所有索引段。
curl http://localhost:8983/solr/<core_name>/update -F stream.body=' <optimize />'
hfwmuf9z3#
您需要传递optimize=true以更新solr请求来优化solr。
optimize=true
oyt4ldly4#
优化索引的方法有很多种,你可以触发solr基本脚本:http://wiki.apache.org/solr/SolrOperationsTools#optimize您还可以在(完全)导入或添加新数据时设置optimize=true ......或者简单地使用optimize=true触发提交也许这也可能是有趣的为您的需要:http://wiki.apache.org/solr/UpdateXmlMessages#A.22commit.22_and_.22optimize.22
zzlelutf5#
优化操作将其视为forceMerge。优化操作重新组织Core中(或每个碎片)的所有段,并将它们合并为1个单独的段(默认为1个段)要优化:您可以在solrconfig.xml中指定MergePolicy,这样Solr将自己合并段。要手动触发优化,请执行以下操作:http://hostname:port/solr/<COLLECTION_NAME>/update?optimize=true&maxSegments=1'为了回答您的下一个问题-如何验证优化是否完成?您可以检查Solr UI中的Core/Shard Overview选项卡,它将指示段的计数。您还可以在优化前后验证/data/index文件夹中的段的大小。
Optimize/forceMerge的性能更好,但仍然是开销很大的操作。https://wiki.apache.org/solr/SolrPerformanceFactors#Optimization_Considerations:“优化的代价很大,如果指数不断变化,轻微的性能提升不会持续很久。”
lsmd5eda6#
为了测试你做了多少改变优化了索引,只需编写一个自定义索引器,并添加随机生成的内容。添加大量文档(500.000或1.000.000),并测量所需的时间。根据上面分享的文章,我为自己做了一个自定义索引器,并将索引文档所需的时间优化了80%。
dxxyhpgq7#
要优化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/
7条答案
按热度按时间wljmcqd81#
在开始之前,请检查相应芯的尺寸。
打开端子1:
打开2号航站楼并执行:
而不是“核心”,更新您各自的核心名称。
你可以看到核心的大小会逐渐增加,大约是索引数据的两倍,然后会突然减少。这需要的时间取决于你的solr数据。
例如,50 G的索引数据峰值接近90 G,然后唐斯到优化的25 G数据。通常,这一数据量需要30- 45分钟。
为什么当我删除文档时,索引目录没有立即变小?强制合并?优化?
pqwbnv8z2#
我发现这是优化Solr索引最简单的方法。在我的上下文中,“优化”意味着合并所有索引段。
hfwmuf9z3#
您需要传递
optimize=true
以更新solr请求来优化solr。oyt4ldly4#
优化索引的方法有很多种,你可以触发solr基本脚本:http://wiki.apache.org/solr/SolrOperationsTools#optimize
您还可以在(完全)导入或添加新数据时设置
optimize=true
......或者简单地使用optimize=true
触发提交也许这也可能是有趣的为您的需要:http://wiki.apache.org/solr/UpdateXmlMessages#A.22commit.22_and_.22optimize.22
zzlelutf5#
优化操作将其视为forceMerge。优化操作重新组织Core中(或每个碎片)的所有段,并将它们合并为1个单独的段(默认为1个段)
要优化:您可以在solrconfig.xml中指定MergePolicy,这样Solr将自己合并段。要手动触发优化,请执行以下操作:http://hostname:port/solr/<COLLECTION_NAME>/update?optimize=true&maxSegments=1'
为了回答您的下一个问题-如何验证优化是否完成?您可以检查Solr UI中的Core/Shard Overview选项卡,它将指示段的计数。您还可以在优化前后验证/data/index文件夹中的段的大小。
Optimize/forceMerge的性能更好,但仍然是开销很大的操作。
https://wiki.apache.org/solr/SolrPerformanceFactors#Optimization_Considerations:
“优化的代价很大,如果指数不断变化,轻微的性能提升不会持续很久。”
lsmd5eda6#
为了测试你做了多少改变优化了索引,只需编写一个自定义索引器,并添加随机生成的内容。添加大量文档(500.000或1.000.000),并测量所需的时间。
根据上面分享的文章,我为自己做了一个自定义索引器,并将索引文档所需的时间优化了80%。
dxxyhpgq7#
要优化Solr内核/分片数据,只需运行如下命令即可:
但是要知道这不是免费的--如果你有很多数据,你可能会在Solr节点上有很多I/O,并且过程本身会花费很多时间。在大多数情况下,你想从调整合并过程开始,而不是强制合并索引本身。
我在Lucene/Solr革命期间做过一个关于这个主题的演讲--如果你想看一下幻灯片和视频,这里有一个链接:https://sematext.com/blog/solr-optimize-is-not-bad-for-you-lucene-solr-revolution/