2013-07-17 2 views
0

Я написал действительно жестко запрограммированное решение для своей проблемы, но это должно быть хорошо. Мне нужно изменить некоторые значения конкретных полей для всех документов в моем индексе. У меня 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(); 
     }   
    } 

ответ

1

Необходимо отправить обновленные документы обратно в Solr для их обновления.

Используйте команду Добавить команду solrServer.add(docs);, прежде чем вы назовете commit, чтобы отправить их обратно. См. Обновленный фрагмент ниже.

... 
try { 
    solrServer.add(docs); 
    solrServer.commit(); 
} 
... 
+0

Благодарим за полезные советы. solrServer.add() должен быть там, и там должен быть SolrInputDocument sid = org.apache.solr.client.solrj.util.ClientUtils.toSolrInputDocument (solrDocument); но ... для преобразования SolrDocument в SolrInputDocument –

+0

Да, я забыл, что вам нужно передать SolrInputDocument для обновлений и рад, что вы нашли метод ClientUtils.toSolrInputDocument. –