SolrJ:禁用自动提交

时间:2011-04-11 15:04:30

标签: solr solrj autocommit

我们有一个Solr实例,我们发现在solrconfig.xml中启用autoCommit实际上可以很好地满足我们的需求。但是,有些实例和一些批处理操作我们要暂时禁用自动提交。我无法找到任何东西,但我想知道是否有人知道通过SolrJ您是否可以禁用某个进程的自动提交,然后重新启用它?

2 个答案:

答案 0 :(得分:4)

您无法禁用和启用在solrconfig.xml中配置的自动提交。但是,您可以在solrconfig.xml中将其禁用并使用commitWithin for those add commands that need autocommit

答案 1 :(得分:1)

回答,因为这是“solr disable autocommit”的第一个结果 现在可以使用new config API来覆盖solrconfig.xml中设置的某些属性,而无需重新加载核心。
Solrj尚未实现新的API。

您不应禁用自动提交,请参阅this article

如果您想同时对多个文档进行批量索引,请设置updateHandler.autoCommit.openSearcher=false并禁用autoSoftCommits:

/**
 * Disables the autoSoftCommit feature.
 * Use {@link #reEnableAutoCommit()} to reenable.
 * @throws IOException network error.
 * @throws SolrServerException solr error.
 */
public void disableAutoSoftCommit() throws SolrServerException, IOException
{
   // Solrj does not support the config API yet.
   String command = "{\"set-property\": {" +
         "\"updateHandler.autoSoftCommit.maxDocs\": -1," +
         "\"updateHandler.autoSoftCommit.maxTime\": -1" +
   "}}";

   GenericSolrRequest rq = new GenericSolrRequest(SolrRequest.METHOD.POST, "/config", null);
   ContentStream content = new ContentStreamBase.StringStream(command);
   rq.setContentStreams(Collections.singleton(content));
   rq.process(solrClient);
}

/**
 * Undo {@link #disableAutoSoftCommit()}.
 * @throws IOException network error.
 * @throws SolrServerException solr error.
 */
public void reenableAutoSoftCommit() throws SolrServerException, IOException
{
   // Solrj does not support the config API yet.
   String command = "{\"unset-property\": [" +
         "\"updateHandler.autoSoftCommit.maxDocs\"," +
         "\"updateHandler.autoSoftCommit.maxTime\"" +
   "]}";

   GenericSolrRequest rq = new GenericSolrRequest(SolrRequest.METHOD.POST, "/config", null);
   ContentStream content = new ContentStreamBase.StringStream(command);
   rq.setContentStreams(Collections.singleton(content));
   rq.process(solrClient);
}

您可以在http://localhost:8983/solr/<core>/config/overlay

看到覆盖属性