如何通过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