SolrJ: отключить автокоммит

У нас есть экземпляр Solr, где мы обнаружили, что включение autoCommit в solrconfig.xml на самом деле может хорошо удовлетворить наши потребности. Однако в некоторых случаях и в некоторых пакетных операциях мы хотим временно отключить автокоммит. Я не смог ничего найти, но мне интересно, если бы кто-нибудь знал, можно ли через SolrJ отключить автокоммит для определенного процесса, а затем снова включить его?

2 ответа

Вы не можете отключить и включить автокоммит, так как он настроен в solrconfig.xml. Тем не менее, вы можете оставить его отключенным в solrconfig.xml и использовать commitWithin для тех команд добавления, для которых требуется автокоммит.

Ответ, потому что это первый результат для "solr disable autocommit".
Теперь это возможно с новым API-интерфейсом конфигурации, который позволяет переопределять некоторые свойства, установленные в solrconfig.xml, без перезагрузки ядра.
Solrj пока не реализует этот новый API.

Вы не должны отключать автокоммиты, см. Эту статью.

Если вы хотите выполнить массовую индексацию сразу нескольких документов, установите 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

Другие вопросы по тегам