Elastic 4s/Elasticsearch -是否有方法更新文档并删除字段?

kgqe7b3p  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(111)

我的应用程序获取某个对象的更改事件,并从这些事件中构建一个用于upsert到elasticsearch的文档:

updateById(
        "index",
        "id"
      ).doc(changeEvent)
        .docAsUpsert(true)

字符串
问题是,一个change事件可能会在Elasticsearch中清空一个字段/删除一个字段。像这样的工作吗?有没有一种方法可以在一次往返中做到这一点?

updateById(
        "index",
        "id"
      ).doc(changeEvent)
        .docAsUpsert(true)
        .script(
          Script(
            "for (field in params.removeFields) {ctx._source.remove(field)}",
            params = removeMap
          )
        )
        .scriptedUpsert(true)


或者我只需要发送一个upsert请求,以及一个单独的脚本请求,它将遍历参数并删除字段?

bvjveswy

bvjveswy1#

您不能同时提供脚本和文档,即你不能同时调用docAsUpsertscriptedUpsert
然而,由于通过doc不能删除字段,我会通过脚本简单地完成。在脚本参数中,你可以提供两个哈希值:

  • changeFields:所有要添加或更改其值的字段
  • removeFields:要删除的所有字段

脚本将变为:

ctx._source.putAll(params.changeFields);
for (field in params.removeFields) {ctx._source.remove(field)}

字符串

相关问题