首页 > 解决方案 > 在 ElasticSearch 中有效地部分更新数组字段

问题描述

有没有办法有效地部分更新数组字段中的元素?例如,一个文档有commands这样一个字段:

"commands": [
  {
    "id": 1000,
    "content": "abc",
  },
  {
    "id": 1001,
    "content": "bcd",
  },
  {
    "id": 1002,
    "content": "cde",
  }
]

更新索引时,我只能有需要更新的命令,而不是所有命令。我尝试使用脚本更新,如下所示:

ctx._source.commands.removeIf(r -> params.commandsToUpdateIds.contains(r.id));
ctx._source.shell.commands.addAll(params.commandsToUpdate);

commands当列表很大(超过 3000 个命令)时,这不起作用,我遇到很多版本冲突错误,并且更新滞后很长。

我想知道是否有一种对数组字段进行部分更新的好方法?

标签: elasticsearch

解决方案


推荐阅读