【问题标题】:Change elastic documents dynamically using Java High Level REST client使用 Java 高级 REST 客户端动态更改弹性文档
【发布时间】:2021-07-15 07:43:29
【问题描述】:

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

这当然行不通,我想知道这是否可以动态构建脚本,如果可以,正确的方法是什么?

【问题讨论】:

    标签: java elasticsearch resthighlevelclient


    【解决方案1】:

    我已经找到了答案,我将在此处发布,以便您可以参考类似问题:

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

    【讨论】:

      猜你喜欢
      • 2019-08-25
      • 2019-07-13
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      相关资源
      最近更新 更多