Elastic Search 文档部分更新

问题描述 投票:0回答:1

我刚刚开始探索弹性搜索,并且在我的项目中坚持了一个要求。我尝试了很多事情,但没有任何对我有用。我已经在弹性搜索索引中保存了一个示例文档

"orderData": {
  "lines": [
    {
      "lineNbr": 1,
      "quantity": {
        "amount": 1,
        "uom": "EACH"
       },
      "weight": null,
      "Qty": null
    },
    {
      "lineNbr": 2,
      "quantity": {
        "amount": 1,
        "uom": "EACH"
       },
      "weight": null,
      "Qty": null
    }
 ]
}

下次我只想更新第 1 行中的一些数据,但这里的问题是我不想进行字段明智的更新。我再次得到完整的 Line Nbr 1 json 类似

{
      "lineNbr": 1,
      "quantity": {
        "amount": 10,
        "uom": "EACH"
      },
      "weight": 5,
      "Qty": 5
}

但是,如果我正在执行更新,第 nbr 2 行标记将被删除,只有第 nbr 1 行标记保留更新后的数据,但我从来不想触摸第 nbr 2 行 我怎样才能实现这个目标?任何帮助将不胜感激。预先感谢。

elasticsearch elastic-stack
1个回答
0
投票

如何在Elasticsearch中部分更新文档而不影响其他字段,可以使用“更新”API

POST /your_index/_update/your_document_id
{
  "script": {
    "source": "ctx._source.orderData.lines.find(line -> line.lineNbr == params.lineNbr).putAll(params.updatedData)",
    "lang": "painless",
    "params": {
      "lineNbr": 1,
      "updated": {
        "quantityFeild": {
          "amountAny": 10,
          "SKU": "EACH001"
        }
      }
    }
  }
}

ctx._source 指的是 --> 原始文档。 orderData.lines.find(line -> line.lineNbr == params.lineNbr) 根据 lineNbr 定位特定行。 putAll(params.updatedData) 更新updatedData中指定的字段,而不影响该行中的其他字段。

参考:https://hub.packtpub.com/crud-create-read-update-delete-operations-elasticsearch/

© www.soinside.com 2019 - 2024. All rights reserved.