我有多个updateByQuery请求,并且正在寻找一种将它们组合在一起然后执行(出于性能原因)的方法。

示例:

QueryByField || field11111 || field222222 || field333333 ||

xxxxxxxxxxxx || newValue || newValueee || newValuee ||

yyyyyyyyyyyy || newValue || newValueee || newValuee ||

zzzzzzzzzzzzzz || newValue || newValueee || newValuee ||

到目前为止,似乎我必须对以上每一行执行以下查询:

UpdateByQueryRequestBuilder updateByQueryRequestBuilder = UpdateByQueryAction.INSTANCE.newRequestBuilder(client);
updateByQueryRequestBuilder
    .source("myIndexName")
    .filter(QueryBuilders.matchQuery("QueryByField","xxxxxxxxxxxx"))
    .script(new Script("ctx._source.field11111 = \"newValue\""  , ScriptService.ScriptType.INLINE, null, null))
    .get();

但是我想知道,是否有与UpdateRequest和BulkRequestBuilder相似的东西可用于UpdateByQuery?

最佳答案

一种解决方案是通过术语中的任何一项查询并在脚本中验证适用的条件。

        String script = "if(ctx._source.QueryByField != null and ctx._source.QueryByField == \"xxxxxxxxxxxx\") { "
                + " ctx._source.field11111 = \"newValue\";"
                + " ctx._source.field222222  = \"newValueee\";"
                + " ctx._source.field333333  = \"newValuee\";"
                + "}"
                + ".. outher conditions";


        UpdateByQueryRequestBuilder requestx = UpdateByQueryAction.INSTANCE.newRequestBuilder(elastic)
                .source("myIndexName")
                .filter(QueryBuilders.termsQuery("QueryByField ", "xxxxxxxxxxxx", "yyyyyyyyyyyy", "zzzzzzzzzzzz"))
                .script(new Script(script, ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, null));

08-07 19:57