Код: Выделить всё
@Override
public void importData() {
List data = getLegeData();
for (Map record : data) {
SolrInputDocument solrDoc = new SolrInputDocument();
// Add main record fields
for (Map.Entry entry : record.entrySet()) {
solrDoc.addField(entry.getKey(), entry.getValue());
}
// Add nested entities
addNestedEntities(solrDoc, record.get("Id"));
// Log the Solr document before adding it to Solr
System.out.println("Solr document before add: " + solrDoc);
try {
solrClient.add(solrDoc);
System.out.println("Added document to Solr: " + solrDoc);
} catch (Exception e) {
System.out.println("Error during Solr add: " + e.getMessage());
e.printStackTrace();
}
break;
}
try {
UpdateResponse response = solrClient.commit();
System.out.println("Solr commit response: " + response);
} catch (SolrServerException | IOException e) {
System.out.println("Error during Solr commit: " + e.getMessage());
throw new RuntimeException(e);
}
}
Код: Выделить всё
Error during Solr add: Error from server at http://192.168.3.106:8983/solr/intra9/update: [doc=null] missing required field: info_aprox
org.apache.solr.client.solrj.impl.BaseHttpSolrClient$RemoteSolrException: Error from server at http://192.168.3.106:8983/solr/intra9/update: [doc=null] missing required field: info_aprox
Код: Выделить всё
Код: Выделить всё
Я попробовал явно задать поле info_aprox в код перед добавлением и подтверждением изменений:
Код: Выделить всё
ensureRequiredField(solrDoc, "info_aprox", "default_value");
ensureRequiredField(solrDoc, "infocompus_aprox", "default_value");
ensureRequiredField(solrDoc, "infocompus_exact", "default_value");
ensureRequiredField(solrDoc, "content_aprox", "default_value");
ensureRequiredField(solrDoc, "content_exact", "default_value");
ensureRequiredField(solrDoc, "header_aprox", "default_value");
ensureRequiredField(solrDoc, "header_exact", "default_value");
ensureRequiredField(solrDoc, "info", "default_value");
ensureRequiredField(solrDoc, "infocompus", "default_value");
private void ensureRequiredField(SolrInputDocument solrDoc, String fieldName, String defaultValue) {
if (Objects.isNull(solrDoc.getField(fieldName))) {
solrDoc.addField(fieldName, defaultValue);
}
if (Objects.isNull(solrDoc.getField(fieldName))) {
System.out.println("Required field missing: " + fieldName);
solrDoc.addField(fieldName, defaultValue);
}
}
Я также пытался сделать info_aprox требуемым="false", но это не помогло.
Я думал о создании solrDoc в файле json и отправке запроса на завивку вместо метода SolrClient.add
Подробнее здесь: https://stackoverflow.com/questions/788 ... ired-field