27

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

但是,我还没有弄清楚如何使用 solrj api 来做到这一点。

有谁知道 solrj 是否可行?或者 solrj 只是没有跟上这个功能?

更新:正如我在邮件列表中描述的(请参阅此处的回复),我发现在 solrj api 中,SolrInputField 的值可以是一个映射 - 它不必是一个简单的标量值。如果是地图,solrj 会update在字段的 xml 元素中添加一个附加属性。例如,这段代码:

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/ 有效值为“设置”和“添加”。

任何的想法?

4

2 回答 2

31

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

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

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

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

在 solrj 单元测试中有一个此代码的示例,在一个名为testUpdateField.

于 2012-09-09T18:50:58.527 回答
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

或者从 UI

在此处输入图像描述

于 2021-07-18T06:13:48.930 回答