2011-09-20 58 views
1
CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr/"); 
SolrInputDocument doc1 = new SolrInputDocument(); 
doc1.addField("id", "id1"); 
doc1.addField("name", "doc1"); 
doc1.addField("price", new Float(10)); 
SolrInputDocument doc2 = new SolrInputDocument(); 
doc2.addField("id", "id1"); 
doc2.addField("name", "doc2"); 

server.add(doc1); 
server.add(doc2); 
server.commit(); 

SolrQuery query = new SolrQuery(); 
query.setQuery("id:id1"); 
query.addSortField("price", SolrQuery.ORDER.desc); 
QueryResponse rsp = server.query(query); 
Iterator<SolrDocument> iter = rsp.getResults().iterator(); 
while(iter.hasNext()){ 
    SolrDocument doc = iter.next(); 
    Collection fieldNames = doc.getFieldNames(); 
    Iterator<String> fieldIter = fieldNames.iterator(); 
    StringBuffer content = new StringBuffer(""); 
    while(fieldIter.hasNext()){ 
     String field = fieldIter.next(); 
     content.append(field+":"+doc.get(field)).append(" "); 
     //System.out.println(field); 
    } 
    System.out.println(content); 
} 

问题是我想得到结果“id:id1 name:doc2 price:10.0”,但输出是“id:id1 name:doc2”...所以我想知道如果我想要得到结果为“id:id1 name:doc2 price:10.0”,我该如何修改我的编程?如何更新文档而不丢失字段?

回答

1

当您添加具有相同ID的文档时。基本上两次添加同一个文档。 Solr将更新/覆盖文档。更新基本上是删除和添加。

由于您使用相同ID添加的第二个文档没有价格字段,因此它不会被添加,您也不会找到它的索引。

当您添加回文档时,您需要将所有字段更改并保持不变。

doc2.addField("price", new Float(10)); // should add it back to the document 
相关问题