我的主要目的是通过java高级rest客户端更新elasticsearch中的现有文档。
对于这个任务,我使用 UpdateByQueryRequest
,并设置修改相关文档的脚本。
我的问题是,如果我能动态设置字段及其新值:
public Script buildUpdateQueryScript(Map<String,String> updatedValues) {
String script = "";
updatedFields.forEach((key,value) -> script.concat("ctx._source.").concat(key).concat(" = ").concat(value) );
return new Script(
ScriptType.INLINE,
"painless",
script,
Collections.emptyMap()
);
}
例如,如果我的 Map
包含一个元素 ("keyOne","valueOne")
,那么 script
具体如下:
"ctx._source.keyOne = valueOne"
这是不工作,当然,我想知道,如果这是甚至可以建立脚本动态,如果是这样,什么是正确的方法来做呢?
1条答案
按热度按时间tmb3ates1#
我已经找到了答案,我会把它贴在这里,这样你就有了类似问题的参考: