如何配置 Solr 以提高索引速度

Posted

技术标签:

【中文标题】如何配置 Solr 以提高索引速度【英文标题】:How to configure Solr for improved indexing speed 【发布时间】:2013-03-18 01:25:23 【问题描述】:

我有一个客户端程序,它生成 1-50 百万个 Solr 文档并将它们添加到 Solr。 我正在使用 ConcurrentUpdateSolrServer 从客户端推送文档,每个请求 1000 个文档。 文档相对较小(很少有小文本字段)。 我想提高索引速度。 我尝试将“ramBufferSizeMB”增加到 1G,将“mergeFactor”增加到 25,但没有看到任何变化。 我想知道是否有其他推荐的设置来提高 Solr 索引速度。 任何指向相关材料的链接将不胜感激。

【问题讨论】:

【参考方案1】:

您似乎正在将数据批量导入 Solr,因此您无需立即搜索任何数据。

首先,您可以增加每个请求的文档数量。由于您的文档很小,我什至会将其增加到每个请求 100K 文档或更多并尝试。

其次,您希望减少批量索引时发生的提交次数。在你的 solrconfig.xml 中寻找:

<!-- AutoCommit

     Perform a hard commit automatically under certain conditions.
     Instead of enabling autoCommit, consider using "commitWithin"
     when adding documents.

     http://wiki.apache.org/solr/UpdateXmlMessages

     maxDocs - Maximum number of documents to add since the last
               commit before automatically triggering a new commit.

     maxTime - Maximum amount of time in ms that is allowed to pass
               since a document was added before automatically
               triggering a new commit.

     openSearcher - if false, the commit causes recent index changes
     to be flushed to stable storage, but does not cause a new
     searcher to be opened to make those changes visible.
  -->
 <autoCommit>
   <maxTime>15000</maxTime>
   <openSearcher>false</openSearcher>
 </autoCommit>

您可以完全禁用自动提交,然后在发布所有文档后调用提交。否则,您可以按如下方式调整数字:

默认 maxTime 是 15 秒,因此如果有未提交的文档,自动提交每 15 秒发生一次,因此您可以将其设置为较大的值,例如 3 小时(即 3*60*60*1000)。您还可以添加&lt;maxDocs&gt;50000000&lt;/maxDocs&gt;,这意味着仅在添加 5000 万个文档后才会发生自动提交。在您发布所有文档后,手动或从 SolrJ 调用一次 commit - 提交需要一段时间,但总体上会快得多。

此外,在您完成批量导入后,减少 maxTimemaxDocs,以便您对 Solr 执行的任何增量帖子将更快地提交。或者使用 solrconfig 中提到的commitWithin

【讨论】:

如果完全禁用提交,您可能会耗尽内存。但不要重新打开搜索器是个好主意。 您好,您能告诉我如何配置它以使其不会重新打开搜索器吗? &lt;openSearcher&gt;false&lt;/openSearcher&gt; 不会在自动提交发生后打开新的搜索器。 但是如果你使用 &lt;str name="replicateAfter"&gt;commit&lt;/str&gt; 的复制,那么值得一提的是,slave 并不关心是否在 master 上打开了一个新的 searcher。如果 master 上有自动提交的索引,则 master 和 slave 上的索引版本将不同,因此 slave 将从 master 复制(部分)索引并打开一个新的搜索器。如果您在 master 上使用带有 clean=true 的数据导入处理程序进行完整导入,这尤其会造成麻烦,因为这首先会发出“全部删除”查询。【参考方案2】:

除了上面写的,在使用 SolrCloud 时,您可能需要考虑在使用 SolrJ 时使用CloudSolrClientCloudSolrClient 客户端类是 Zookeeper 感知的,并且能够直接连接到领导分片,在某些情况下加速索引。

【讨论】:

以上是关于如何配置 Solr 以提高索引速度的主要内容,如果未能解决你的问题,请参考以下文章

Solr如何配置访问Solr UI

如何设置/配置solr索引文件的最大大小?

配置 Solr

solr亿万级索引优化实践-自动生成UUID

solr6.6初探之主从同步

如何在solr中获取lucene索引的版本