3

Solr 4.x 有一个很好的新特性,它允许您指定在对现有文档进行更新时如何更新多值字段。具体来说,您可以说更新文档是否会用新值替换多值字段的旧值,或者是否应该将新值附加到现有值。

我已经尝试过使用请求处理程序,如下所述:

http://wiki.apache.org/solr/UpdateXmlMessages#Optional_attributes_for_.22field.22

我使用 curl 发送 xml,其中某些字段使用了该update=add选项:

<field name="skills" update="add">Python</field>

这按预期工作。

但是我无法通过 Java API (SolrJ) 来执行此操作。

如果我做这样的事情:

SolrInputDocument doc1 = new SolrInputDocument();
doc1.setField("ID_VENTE", "idv1");
doc1.setField("FACTURES_PRODUIT", "fp_initial");
solrServer.add(doc1);
solrServer.commit();

SolrInputDocument doc2 = new SolrInputDocument();
doc2.setField("ID_VENTE", "idv1");
doc2.setField("FACTURES_PRODUIT", "fp_2");    
solrServer.add(doc2);
solrServer.commit();

“FACTURES_PRODUIT”字段的值变为“fp_2”(初始值丢失)。我也试过:

doc2.addField("FACTURES_PRODUIT", "fp_2");  

但结果是一样的。我还研究了SolrInputField类,但没有发现任何类似的东西。

所以,我的问题是,我如何使用 Solr 4 Java API 通过附加(而不是替换)新值来将值更新到多值字段中?

4

1 回答 1

7

Ok, I solved it after debugging a bit the SolrJ code. You have to do this:

    SolrInputDocument doc2 = new SolrInputDocument();
    Map<String,String> fpValue2 = new HashMap<String, String>();
    fpValue2.put("add","fp2");        
    doc2.setField("FACTURES_PRODUIT", fpValue2);
于 2013-04-26T12:00:12.170 回答