У меня есть ядро с миллионами записей.
Я хочу добавить собственный обработчик, который сканирует существующие документы и обновляет одно из полей в зависимости от условия (например, возраст>12).
Я предпочитаю делать это на на стороне сервера Solr, чтобы избежать отправки миллионов документов клиенту и обратно.
Я думал написать плагин solr, который будет получать запрос и обновлять некоторые поля в документах запроса (например, удаление обработчиком запроса).< br> Мне было интересно, существуют ли существующие решения или лучшие альтернативы.
Я некоторое время искал в Интернете и не смог найти примеров подключаемых модулей Solr, которые обновляют документы (мне не нужно расширять обработчик обновлений).
Я написал подключаемый модуль, в котором используется следующий код, который работает нормально, но не так быстро, как мне нужно.
В настоящее время я делаю:
AddUpdateCommand addUpdateCommand = new AddUpdateCommand(solrQueryRequest);
DocIterator iterator = docList.iterator();
SolrIndexSearcher indexReader = solrQueryRequest.getSearcher();
while (iterator.hasNext()) {
Document document = indexReader.doc(iterator.nextDoc());
SolrInputDocument solrInputDocument = new SolrInputDocument();
addUpdateCommand.clear();
addUpdateCommand.solrDoc = solrInputDocument;
addUpdateCommand.solrDoc.setField("id", document.get("id"));
addUpdateCommand.solrDoc.setField("my_updated_field", new_value);
updateRequestProcessor.processAdd(addUpdateCommand);
}
Но это очень дорого, так как обработчик обновления снова извлечет документ, который у меня уже есть под рукой.
Есть ли безопасный способ обновить документ lucene и записать его обратно, принимая во внимание весь код, связанный с Solr, такой как кеши? , дополнительная логика solr и т. д.?
Я думал преобразовать его в SolrInputDocument, а затем просто добавить документ через Solr, но сначала мне нужно преобразовать все поля.
Заранее спасибо, Авнер