2013-07-17 49 views
0

我已經爲我的問題編寫了真正的硬編碼解決方案,但它應該沒問題。我需要爲索引中的所有文檔編輯一些具體字段的值。我的索引中有55500個文檔。SolrJ - 我無法更新所有Solr文檔的具體字段的值

我想編輯每個文檔的字段並提交500個文檔。我認爲這個解決方案應該工作(我試圖從我的索引中刪除一個id爲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以便更新它們。

在調用commit之前,使用添加命令solrServer.add(docs);將它們發回。請參閱下面的更新代碼片段。

... 
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方法。 –