在Solr中禁用显式提交

时间:2013-04-09 08:59:30

标签: solr lucene

我正在努力提高应用程序的索引速度,而我无法完全控制执行索引的代码。我发现索引代码在每个文档之后进行提交,这是出于性能原因我想避免的。

问题:

  

在Solr中是否可以禁用从a明确提交的所有提交   客户端,而只依赖于Solr配置中配置的自动提交?

2 个答案:

答案 0 :(得分:1)

聪明的问题!

我在很多应用程序中都看到过相同的情况,这是每个人都犯的第一个错误。在开箱即用的Solr中是不可能的,但我认为你可以自己写UpdateRequestProcessor

截至目前,这在配置中是不可能的,但您可以使用空方法或仅仅日志行覆盖processCommit方法。这应该工作正常,除非自动提交使用相同的工作流程,不应该是这种情况,但我会检查。无论如何,你可以轻松测试这个。

一旦编写了自己的组件,就必须将它作为jar用于solr并在更新请求处理器链(solrconfig.xml)中进行配置:

<updateRequestProcessorChain>
    <processor class="solr.NoCommitUpdateRequestProcessorFactory" />
    <processor class="solr.LogUpdateProcessorFactory" />
    <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>

不要忘记最后两行是默认请求处理器,否则所有更新请求都将无效!

答案 1 :(得分:0)

从Solr 5.3开始(如果不是更早),您可以将以下内容添加到solrconfig.xml:

<updateRequestProcessorChain name="ignore-commit-from-client" default="true">
  <processor class="solr.IgnoreCommitOptimizeUpdateProcessorFactory">
    <int name="statusCode">200</int>
  </processor>
  <processor class="solr.LogUpdateProcessorFactory" />
  <processor class="solr.DistributedUpdateProcessorFactory" />
  <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>

请参阅:https://lucene.apache.org/solr/guide/6_6/shards-and-indexing-data-in-solrcloud.html#ShardsandIndexingDatainSolrCloud-IgnoringCommitsfromClientApplicationsinSolrCloud