如何在不丢失字段的情况下更新文档?

时间:2011-09-20 08:27:16

标签: lucene solr

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 个答案:

答案 0 :(得分:1)

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

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

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

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