微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Java 高级 REST 客户端动态更改弹性文档

如何解决使用 Java 高级 REST 客户端动态更改弹性文档

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。