如何使用java api elasticsearch脚本更新多个字段

Pya*_*are 5 elasticsearch

我正在尝试使用Java Api通过Elastic Search Script更新索引中的多个值.但无法更新字段.

示例代码: -

1:

UpdateResponse response = request.setScript("ctx._source").setScriptParams(scriptParams).execute().actionGet();
Run Code Online (Sandbox Code Playgroud)

2:

UpdateResponse response = request.setScript("ctx._source.").setScriptParams(scriptParams).execute().actionGet();
Run Code Online (Sandbox Code Playgroud)

如果我提到.(点)in("ctx._source.")获取illegalArgument Exception并且如果我不使用dot,则不会获得任何异常但值不会在Index中更新.任何人都可以告诉我解决方案.

jen*_*ena 12

首先,您的脚本(ctx._source)没有做任何事情,正如其中一位评论者已经指出的那样.如果你想更新字段"a",那么你需要一个像这样的脚本:

ctx._source.a = "foobar"
Run Code Online (Sandbox Code Playgroud)

这会将字符串"foobar"分配给字段"a".但是,您可以做的不仅仅是简单的任务.查看文档以获取更多详细信息和示例:

http://www.elasticsearch.org/guide/reference/api/update/

也可以使用一个脚本更新多个字段.您可以使用分号分隔不同的MVEL指令.例如:

ctx._source.a = "foo"; ctx._source.b = "bar"
Run Code Online (Sandbox Code Playgroud)


Bas*_*asK 5

在Elastic搜索中有一个Update Java API.请查看以下代码

client.prepareUpdate("index","typw","1153")
            .addScriptParam("assignee", assign)
             .addScriptParam("newobject", responsearray)
            .setScript("ctx._source.assignee=assignee;ctx._source.responsearray=newobject ").execute().actionGet();
Run Code Online (Sandbox Code Playgroud)

这里,assign变量包含对象值,响应数组变量包含数据列表.