elasticsearch java客户端更新脚本与params

时间:2015-05-29 10:07:36

标签: java elasticsearch

我使用此脚本更新文档:

     UpdateResponse response = client.prepareUpdate("index","type","id")
         .setScript("ctx._source.activity_entry = new groovy.json.JsonSlurper().parseText(\" {\\\"last_activity_refresh_time\\\": 777 }\");"
                    ,ScriptService.ScriptType.INLINE)
         .get();

它有效。

我想使用params而不是在脚本中指定要更新的值,但如果我使用它:

Map<String, Object> params = new HashMap<>();
params.put("param", "{last_activity_refresh_time: 777 }");
UpdateResponse response = client.prepareUpdate("index","type","id")
            .setScriptParams(params)
            .setScript("ctx._source.activity_entry = param;", ScriptService.ScriptType.INLINE)

它返回给我这个错误:

Exception in thread "main" org.elasticsearch.index.mapper.StrictDynamicMappingException: mapping set to strict, dynamic introduction of [activity_entry] within [activity_entry] is not allowed

无论我在参数中放置什么价值,都是这样的:

params.put("param", "adfhskjfh");

我总是得到同样的错误,好像问题不是值,而是在它背后的机制中。

我使用弹性1.5.2。有关如何使其有效的任何提示吗?

谢谢, 安德烈

1 个答案:

答案 0 :(得分:0)

我发现了什么错误,JasonSlurper缺少对param的调用:

int