2017-07-20 16 views
0

複数のupdateByQueryリクエストがあり、それらをまとめてグループ化して(パフォーマンス上の理由から)実行する方法を探しています。java apiを使用してBULK UpdateByQueryを実行する方法 - Elasticsearch 5.x


QueryByField ||フィールド11111 ||フィールド222222 ||フィールド333333 ||

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

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

zzzzzzzzzzzz || 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 & UpdateByQueryに使用できるBulkRequestBuilder?

答えて

0

のいずれかでクエリを照会し、のスクリプトでを検証するという条件が適用されます。

 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)); 
関連する問題