2014-02-25 95 views
1

我想更新solr中某个文档的特定字段。但是,尽管如此,文档的其他 字段将变为空。在solr中更新文档

CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://mydomain:8983/solr/index_socialmedia/"); 
    List<SolrInputDocument> solrInputDocsList = new ArrayList<SolrInputDocument>(); 

    SolrInputDocument solrInputDoc = new SolrInputDocument(); 

    solrInputDoc.addField("id","427832898745234516478592"); 
    solrInputDoc.addField("city","Kolkata"); 


    solrInputDocsList.add(solrInputDoc); 

    server.add(solrInputDocsList); 
    server.commit(); 

在上面的代码中,“id”字段是唯一字段。 我该如何解决这个问题。

回答

0

在你的Solr schema.xml中

+0

这不是** uniqueKey **的问题。 Vijay在他的问题中提到过。“**”id“字段是唯一字段**” – buddy86

0

哪个Solr的版本设置<uniqueKey>id</uniqueKey>您使用的? 如果它低于4.0,solr不支持单个字段更新(部分更新) 因此在您的情况下,现有的旧文档被删除并且新文档被插入相同的ID (原因Solr不支持单个字段或部分更新是lucene如果您在使用Solr的4.0不支持部分更新)

你可以参考这个solrj api for partial document update

1

我试着用下面的代码片段。它能够进行部分更新。尝试这个。

SolrServer server = new HttpSolrServer("http://mydomain:8983/solr/index_socialmedia/"); 

SolrInputDocument solrInputDoc = new SolrInputDocument(); 
Map<String, String> update = new HashMap<String, String>(); 
update.put("set", "Kolkata"); 

solrInputDoc.addField("id","427832898745234516478592"); 
solrInputDoc.addField("city", update); 

server.commit(); 
+0

非常感谢。它正在更新。但是,我必须在Slor 4.4中更新680万条记录,并且每个分片有两个分割7GB RAM的云环境。大约有100万条记录正在更新,之后,由于内存不足,其中一个碎片崩溃。任何线索? –

+0

如果答案解决了您的问题,请将其标记为已接受的答案。 – buddy86