我正在努力提高应用程序的索引速度,而我无法完全控制执行索引的代码。我发现索引代码在每个文档之后进行提交,这是出于性能原因我想避免的。
问题:
在Solr中是否可以禁用从a明确提交的所有提交 客户端,而只依赖于Solr配置中配置的自动提交?
答案 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>