如何通过Java API更新Elasticsearch 2.2脚本中的嵌套对象

我正在尝试使用类似于此处概述的技术,通过Java

API在Elasticsearch中更新嵌套对象。问题是如何将json传递到脚本中。如果我只是像这里建议的那样盲目地将json连接到脚本字符串,则Groovy无法编译。如果直接将其作为参数传递,则只会将其解析为字符串。如果我尝试使用JsonSlurper,例如:

String script = "ctx._source.pete = new groovy.json.JsonSlurper().parseText(json)";

Map<String, Object> params = ImmutableMap.of("json", json);

return new Script(script, ScriptService.ScriptType.INLINE, null, params);

我收到一个编译异常:无法解析类groovy.json.JsonSlurper

JsonSlurper方法的另一个问题似乎是,Elasticsearch团队基本上已在2.2中禁用了它。

有谁知道如何通过Java API正确传递json?

回答:

感谢Elasticsearch的人员为我提供的帮助。答案是将JSON转换为Map,然后仅将Map用作参数:

String script = "ctx._source.pete = jsonMap";

Map<? ,?> jsonMap = new ObjectMapper().readValue(json, HashMap.class);

Map<String, Object> params = ImmutableMap.of("jsonMap", jsonMap);

return new Script(script, ScriptService.ScriptType.INLINE, null, params);

org.codehaus.jackson.map.ObjectMapper用来做从JSON到的转换Map

以上是 如何通过Java API更新Elasticsearch 2.2脚本中的嵌套对象 的全部内容, 来源链接: utcz.com/qa/401249.html

回到顶部