Я написал действительно жестко запрограммированное решение для своей проблемы, но это должно быть хорошо. Мне нужно изменить некоторые значения конкретных полей для всех документов в моем индексе. У меня 55500 документов в моем индексе.SolrJ - я не могу обновить значения конкретных полей всех Solr docs
Я пытаюсь редактировать поля для каждого документа и совершать на 500 документов. Я думаю, что это решение должно работать (я пытался удалить один документ по id из моего индекса, и он был удален), но в моем индексе нет изменений ... есть еще поля с плохими значениями (с # 0, которые я хочу удалить)
for (int i = 0; i < 55501; i = i + 500) {
SolrQuery query = new SolrQuery();
query.setParam("start", i+"");
query.setParam("q", "*:*");
query.setParam("rows", "500");
String url = "http://MYINDEX";
HttpSolrServer solrServer = new HttpSolrServer(url);
QueryResponse qResponse;
try {
qResponse = solrServer.query(query);
SolrDocumentList docs=qResponse.getResults();
for (SolrDocument solrDocument : docs) {
String parseTime = (String) solrDocument.getFieldValue("parse_time");
String parseTimeUnix = (String) solrDocument.getFieldValue("parse_time_unix_timestamp");
parseTime = parseTime.replaceAll("#0;", "");
parseTimeUnix = parseTimeUnix.replaceAll("#0;", "");
solrDocument.setField("parse_time", parseTime);
solrDocument.setField("parse_time_unix_timestamp", parseTimeUnix);
}
} catch (SolrServerException e) {
e.printStackTrace();
}
try {
solrServer.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Благодарим за полезные советы. solrServer.add() должен быть там, и там должен быть SolrInputDocument sid = org.apache.solr.client.solrj.util.ClientUtils.toSolrInputDocument (solrDocument); но ... для преобразования SolrDocument в SolrInputDocument –
Да, я забыл, что вам нужно передать SolrInputDocument для обновлений и рад, что вы нашли метод ClientUtils.toSolrInputDocument. –