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