今天需要使用java更新es的嵌套属性的值。 找了好久终于找到了对应的api。
原文地址 https://github.com/elastic/elasticsearch-lang-groovy/blob/master/src/test/java/org/elasticsearch/script/groovy/GroovyScriptSearchTests.java
public void handle(TraceLogMessage message) throws Exception { TraceLogDocument emptyTraceLog = new TraceLogDocument(); emptyTraceLog.date = message.date; emptyTraceLog.id = message.id; emptyTraceLog.app = message.app; emptyTraceLog.action = message.action; emptyTraceLog.result = message.result; emptyTraceLog.content = Lists.newArrayList(); StringBuilder script = new StringBuilder("ctx._source.content+=line"); if ("ERROR".equals(message.result)) script.append("; ctx._source.result=\"ERROR\""); // if log doc is created by WARN, ERROR should update result Map<String, String> params = Maps.newHashMap("line", message.content); UpdateRequest request = new UpdateRequest() .script(new Script(script.toString(), ScriptService.ScriptType.INLINE, null, params)) .upsert(JSON.toJSON(emptyTraceLog)); request.scriptedUpsert(true); traceType.update(message.id, request); }