用于部分文档更新的solrjapi

jgovgodb  于 2022-11-05  发布在  Solr
关注(0)|答案(2)|浏览(188)

Solr 4测试版已经出来了,GA版很快就会出来。部分文档更新已经有一段时间了,如下所述:http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/
然而,我还没有弄清楚如何用solrjapi来做这件事。
有没有人知道solrj是否可以实现这个功能?或者solrj只是没有跟上这个功能的速度?

**update:**正如我在邮件列表中所描述的(参见回复here),我发现在solrj api中,SolrInputField的值可以是一个Map--它不一定是一个简单的标量值。如果它是一个Map,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”。
你知道吗?

9jyewag0

9jyewag01#

事实证明,上面问题中显示的代码片段实际上是有效的。我不知道第一次尝试时出了什么问题,也许我只是忘记了提交,或者我的模式配置错误。
无论如何,这个问题是非常本地化的。然而,由于带有哈希Map的API的文档记录如此之差,我想也许值得保留这个问题和答案。
散列Map的键可以是以下三个值之一:

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

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

uwopmtnx

uwopmtnx2#

您可以使用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

或从用户界面

相关问题