solrj api用于部分文档更新

时间:2012-08-29 17:57:51

标签: solr solrj

Solr 4 beta已经发布,GA版本即将推出。部分文档更新已经存在了一段时间,如下所述:http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/

但是,我还没弄清楚如何使用solrj api。

有谁知道solrj是否可行?或者solrj是不是没有达到这个功能的速度?

正如我在邮件列表中所描述的那样

更新:(请参阅回复here),我发现在solrj api中,SolrInputField的值可以是一个地图 - 它没有'必须是一个简单的标量值。 如果是地图,solrj会在字段的xml元素中添加额外的update属性。 例如, 这段代码:

SolrInputDocument doc = new SolrInputDocument();
Map<String, String> partialUpdate = new HashMap<String, String>();
partialUpdate.put("set", "foo");
doc.addField("id", "test_123");
doc.addField("description", partialUpdate);

产生此文件:

<doc boost="1.0">
    <field name="id">test_123</field>
    <field name="description" update="set">foo</field>
</doc>

在这个例子中,我为这个附加属性使用了“set”这个词,但它不起作用。 Solr不像我预期的那样更新字段。 根据这个链接: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ 有效值为“set”和“add”。

有什么想法吗?

2 个答案:

答案 0 :(得分:30)

事实证明,问题上面显示的代码段实际上是有效的。我第一次尝试时不知道出了什么问题,也许我只是忘了提交或者我的架构配置错误。

无论如何,这个问题非常本地化。但是,由于带有哈希映射的api文档记录很少,我想也许值得保留这个问题和答案。

哈希映射的关键字可以是以下三个值之一:

  • set - 设置字段。
  • add - 添加到多值字段。
  • inc - 增加一个字段。

在solrj单元测试中,有一个名为testUpdateField的方法中的代码示例。

答案 1 :(得分:0)

您可以使用 SOLR API 的更新端点更新部分文档

curl 'https://solr-url/update?commitWithin=1000&overwrite=true&wt=json' \
    -X POST \
    -H 'accept: application/json, text/plain, */*' \
    --data-raw '[{ "the-unique-filed": "value", "field-to-change":{"set": "new-value"} }]' \
    --compressed

或从用户界面

enter image description here