Elasticsearch UpdateByQueryRequest using XContentBuilder



我有UpdateRequest,可以用updateRequest.doc(XContentBuilder);设置XContentBuilder。是否可以对UpdateByQueryRequest执行相同的操作?如果不能,我可以将XContentBuilder转换为Script吗?Script的替代品有哪些?

如果你查看Elasticsearch的UpdateByQueryRequest的源代码,你会注意到,使用下面的方法可以实现你想要的,正如你所注意到的,它可以将script转换为XContentBuilder

@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文档并没有将script转换为XContentBuilder的示例,但由于有这种方法,您可以简单地使其工作:(

我最终要做的是转换为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));

如果有人找到更好的解决方案,我会把这个问题留着。

最新更新