【问题标题】:Solr: How to update only selected field using curl or command?Solr:如何使用 curl 或命令仅更新选定的字段?
【发布时间】:2020-02-14 10:54:02
【问题描述】:

我有如下的 Solr 文档

{
    "SKU":"1905/SHIRT DRESS-0",
    "DateCreated":["2019-08-18T15:21:04.090Z"],
    "DateModified":["2020-01-17T02:31:16.803Z"],
    "Name":"TIGRESS COLLECTION - SHIRT DRESS, SIZE 0 (6-8)",
    "Price":["249.00 AUD"],
    "PriceSale":["99.50 AUD"],
    "Size":["SIZE 0 (6-8)"],
    "StockLevel":["in stock"],
    "SubCategory":["KAFTAN"],
    "IsDeleted":[0],
    "ProductAddedOn":["2020-02-14T10:38:43.047Z"],
    "_version_":1658508251550973952
}

我只想更新此文档中的 1 个字段。

我想更新 IsDeleted = 1,其中 ProductAddedOn 小于今天的日期

如何做到这一点?

另外,我尝试使用以下命令更新名称

curl -X POST -H 'Content-Type: application/json' 'http://10.7.0.106:8983/solr/prashant1/update?_version_:1658508177093689344&versions=true&commit=true' --data-binary ' [{ "SKU" : "1905/SHIRT DRESS-0", "Name" : "update attempt with correct existing version" }]'

但此命令会从文档中删除除名称和 SKU 之外的所有其他字段。

所以我只想更新文档中的 1 个字段,其他字段应保持原样。

【问题讨论】:

  • 您是否阅读过 Solr 文档中的 Atomic 更新? lucene.apache.org/solr/guide/8_4/…
  • 你不能在 Solr 中做UPDATE ... WHERE <condition>。您必须检索文档,然后为每个 ID 发布更新。
  • 同意@MatsLindh,条件部分这里就不处理了……要单独处理……
  • 但是您也许可以使用条件函数查询并实现您想要的。这不会更改索引中的数据,但可以操纵搜索响应。 lucene.apache.org/solr/guide/8_4/…
  • 对于可能有用的小型用例,是的。但是必须为每个结果集中的每个文档列出的每个字段评估函数,而不是使用索引 - 这是文档搜索引擎有用的一种:-)

标签: shell curl solr command


【解决方案1】:

Solr 支持通过 add 和 set 等字段修饰符对单个文档进行简单的原子更新(也称为部分更新)。

乐观并发控制是另一种原子更新文档的方法。

修饰符 Solr 支持几个以原子方式更新文档值的修饰符。

set – 设置或替换特定值,如果将 null 指定为新值,则删除该值

例子:

curl http://10.224.143.172:8983/solr/knowledge_combined/update?commit=true --data-binary $'[{"id" : "1", "site_name"  : {"set":"Test new change"} }]'

【讨论】:

  • 谢谢 Abhijit,但我不想有条件更新。你能告诉我如何在没有任何条件的情况下使用 isDeleted=1 更新所有文档吗?
  • 检索所有isDeleted=1的文档。然后更新文档并推送到 solr 进行更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多