2017-09-11 144 views
0

我在Solr中有以下索引數據。我想使用SolrJ在索引數據中添加額外的「位置」字段。我怎樣才能做到這一點?使用SolrJ更新Solr中的文檔

"response":{"numFound":3061,"start":3059,"docs":[ 
     { 
     "Id":12345, 
     "Name":"Rajeev Kumar", 
     "_version_":1223434645768768687}, 
     { 
     "Id":67890, 
     "Name":"Rohit Kumar", 
     "_version_":1246457656544545434}] 
    }} 

更新它應該是這樣的後 -

"response":{"numFound":3061,"start":3059,"docs":[ 
     { 
     "Id":12345, 
     "Name":"Rajeev Kumar", 
     "Location" : <some value>, 
     "_version_":1223434645768768687}, 
     { 
     "Id":67890, 
     "Name":"Rohit Kumar", 
     "Location": <some value>, 
     "_version_":1246457656544545434}] 
    }} 

我想是這樣的 -

public static void main(String[] args) throws SolrServerException, IOException { 

      String urlString = "http://localhost:8983/solr/gettingstarted"; 
      HttpSolrClient solr = new HttpSolrClient.Builder(urlString).build(); 
      solr.setParser(new XMLResponseParser()); 
      SolrInputDocument document = new SolrInputDocument(); 
      HashMap<String, Object> value = new HashMap<String, Object>(); 
      value.put("set","Delhi"); 
      document.addField("Location", value); 
      solr.commit(); 
    } 

但問題是,這是創建一個新的文件,而不是更新舊文件。提前感謝您的幫助。

回答

1

您必須在文檔值中包含id部分,否則Solr無法找到要更新的原始文檔。這應該是一個uniqueKey字段。

document.addField("Id", 12345); 

您無法對一個請求中的多個文檔執行更新,因此每個文檔都必須自行更新。

+0

好的。我已經添加了唯一鍵,但是這個錯誤是未定義的字段「位置」。我需要在更新之前在schema.xml中添加「位置」嗎? – user7348570

+0

是的,除非您使用無模式模式,否則該字段必須存在於模式中。 – MatsLindh