我有 UpdateRequest 我可以设定 XContentBuilder 使用: updateRequest.doc(XContentBuilder); . 有没有可能执行相同的操作 UpdateByQueryRequest ? 如果不是,我能改变吗 XContentBuilder 至 Script ? 有什么替代方案 Script ?
UpdateRequest
XContentBuilder
updateRequest.doc(XContentBuilder);
UpdateByQueryRequest
Script
ou6hu8tu1#
如果您查看elasticsearch的updatebyqueryrequest的源代码,您会注意到,使用下面的方法可以实现您想要的,正如您所注意到的,它可以将 script 至 XContentBuilder .
script
@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没有转换的示例 script 至 XContentBuilder ,但由于方法存在,您可以简单地使其工作:)
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));
如果有人找到更好的解决办法,我就把这个问题留待讨论。
2条答案
按热度按时间ou6hu8tu1#
如果您查看elasticsearch的updatebyqueryrequest的源代码,您会注意到,使用下面的方法可以实现您想要的,正如您所注意到的,它可以将
script
至XContentBuilder
.es docs没有转换的示例
script
至XContentBuilder
,但由于方法存在,您可以简单地使其工作:)zfciruhq2#
我最后做的是转换为map,并将其作为脚本传递:
如果有人找到更好的解决办法,我就把这个问题留待讨论。