Shi*_*gon 3 solr updates multivalue solrj
Solr 4.x具有这个不错的新功能,可让您指定在对现有文档进行更新时如何更新multiValued字段.具体来说,您可以说更新文档是否将使用新值替换多值字段的旧值,或者是否应将新值附加到现有值.
我已经使用请求处理程序尝试了这个,如下所述:
http://wiki.apache.org/solr/UpdateXmlMessages#Optional_attributes_for_.22field.22
我使用curl发送xml,其中一些字段使用了该update=add
选项:
<field name="skills" update="add">Python</field>
Run Code Online (Sandbox Code Playgroud)
这按预期工作.
但是我无法知道如何使用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();
Run Code Online (Sandbox Code Playgroud)
字段"FACTURES_PRODUIT"的值变为"fp_2"(初始值丢失).我也尝试过:
doc2.addField("FACTURES_PRODUIT", "fp_2");
Run Code Online (Sandbox Code Playgroud)
但结果是一样的.我也查看了SolrInputField类,但没有找到类似的东西.
所以,我的问题是,如何通过附加(而不是替换)新值来使用Solr 4 Java API将值更新到multiValued字段?
好吧,我在调试了一下SolrJ代码后解决了它.你必须这样做:
SolrInputDocument doc2 = new SolrInputDocument();
Map<String,String> fpValue2 = new HashMap<String, String>();
fpValue2.put("add","fp2");
doc2.setField("FACTURES_PRODUIT", fpValue2);
Run Code Online (Sandbox Code Playgroud)