我的应用程序获取某个对象的更改事件,并从这些事件中构建一个用于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请求,以及一个单独的脚本请求,它将遍历参数并删除字段?
1条答案
按热度按时间bvjveswy1#
您不能同时提供脚本和文档,即你不能同时调用
docAsUpsert
和scriptedUpsert
。然而,由于通过
doc
不能删除字段,我会通过脚本简单地完成。在脚本参数中,你可以提供两个哈希值:changeFields
:所有要添加或更改其值的字段removeFields
:要删除的所有字段脚本将变为:
字符串