[英]Elastic - Use Java High Level Rest Client To Perform a String Query
[英]Change elastic documents dynamically using Java High Level REST client
我的主要目的是通过 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"
这当然行不通,我想知道这是否甚至可以动态构建脚本,如果可以,正确的方法是什么?
我已经找到了答案,我将在此处发布,以便您可以参考类似问题:
Map<String, Object> params = new HashMap<>();
params.put("keyOne", "valueOne");
params.put("keyTwo", "valueTwo");
for (String key : params.keySet()) {
script = script + "ctx._source." + key + " = params." + key + ";";
}
return new Script(
ScriptType.INLINE,
"painless",
script,
params
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.