我目前正在努力提高我无法完全控制执行索引的代码的应用程序的索引速度。我发现索引代码在每个文档之后都会进行提交,出于性能原因,我想避免这种情况。
问题:
在 Solr 中是否可以禁用从客户端显式提交的所有提交,而仅依赖于 Solr 配置中配置的自动提交?
聪明的问题!
我在很多应用程序中都看到了同样的情况,这是每个人都会犯的第一个错误。UpdateRequestProcessor
在 Solr 中开箱即用是不可能的,但我认为你可以通过自己编写来实现。
到目前为止,这在配置中是不可能的,但您可能会processCommit
用一个空方法或只是一个日志行来覆盖该方法。除非自动提交使用相同的工作流程,否则应该可以正常工作,但情况并非如此,但我会检查一下。无论如何,您可以轻松地对此进行测试。
一旦您编写了自己的组件,您必须将其作为 jar 提供给 solr,并在更新请求处理器链 ( solrconfig.xml
) 中对其进行配置:
<updateRequestProcessorChain>
<processor class="solr.NoCommitUpdateRequestProcessorFactory" />
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
不要忘记最后两行,它们是默认的请求处理器,否则所有更新请求都不会执行任何操作!
从 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>