elasticsearch updatebyqueryrequest

knpiaxh1  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(2)|浏览(428)

我有 UpdateRequest 我可以设定 XContentBuilder 使用: updateRequest.doc(XContentBuilder); . 有没有可能执行相同的操作 UpdateByQueryRequest ? 如果不是,我能改变吗 XContentBuilderScript ? 有什么替代方案 Script ?

ou6hu8tu

ou6hu8tu1#

如果您查看elasticsearch的updatebyqueryrequest的源代码,您会注意到,使用下面的方法可以实现您想要的,正如您所注意到的,它可以将 scriptXContentBuilder .

@Override
    public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
        builder.startObject();
        if (getScript() != null) {
            builder.field("script");
            getScript().toXContent(builder, params);
        }
        getSearchRequest().source().innerToXContent(builder, params);
        builder.endObject();
        return builder;
    }

es docs没有转换的示例 scriptXContentBuilder ,但由于方法存在,您可以简单地使其工作:)

zfciruhq

zfciruhq2#

我最后做的是转换为map,并将其作为脚本传递:

Map<String, Object> params = mapper.readValue(Strings.toString(XContentBuilder), Map.class);
    UpdateByQueryRequest updateRequest = new UpdateByQueryRequest("document");
 updateRequest.setScript(new Script(ScriptType.INLINE,
                "painless",
                "ctx._source.document = params.document",
                params));

如果有人找到更好的解决办法,我就把这个问题留待讨论。

相关问题