2011-09-20 2 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 
관련 문제