Как я могу обновить документ, не теряя поля? - PullRequest
1 голос
/ 20 сентября 2011
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 Ответ

1 голос
/ 20 сентября 2011

При добавлении документов с одинаковым идентификатором.Вы в основном добавляете один и тот же документ дважды.Solr обновит / перезапишет документ.Обновление - это, в основном, удаление и добавление.

Поскольку у второго документа, который вы добавили с тем же идентификатором, нет поля цены, он не будет добавлен, и вы не найдете его в индексе.

вам нужно будет изменить все поля без изменений при добавлении документа обратно.

doc2.addField("price", new Float(10)); // should add it back to the document
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...