使用java高级rest客户端动态更改弹性文档

8ftvxx2r  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(235)

我的主要目的是通过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"

这是不工作,当然,我想知道,如果这是甚至可以建立脚本动态,如果是这样,什么是正确的方法来做呢?

tmb3ates

tmb3ates1#

我已经找到了答案,我会把它贴在这里,这样你就有了类似问题的参考:

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
        );

相关问题