1

I have to upgrade our ES from 6.2 (TCP client) to 7.4.2 (REST API)

And I have a little problem with UpdateByQueryRequestBuilder, that looks like need to be change to UpdateByQueryRequest (doc). The old code looks like this:

BoolQueryBuilder dateQueryBuilder = ...
QueryBuilder a = ...
BoolQueryBuilder b = ...

UpdateByQueryRequestBuilder updateByQuery = new UpdateByQueryRequestBuilder(tcpClient, UpdateByQueryAction.INSTANCE);
updateByQuery.filter(dateQueryBuilder.filter(a).filter(b)).script(updateScript);

As I wrote, I'm understanding UpdateByQueryRequestBuilder (that using the oldest client) should be replace with UpdateByQueryRequest but this new API haven't filter method (just setQuery that will replace the current query in chain case...)

UpdateByQueryRequest updateRequest = new UpdateByQueryRequest();
updateRequest.setQuery(dateQueryBuilder)
    // .setQuery(a) - will replace dateQueryBuilder instead of chain new filter...
    // .filter - not exist in the new API

So the question, how should I replace this code with newest ES REST API (or chain the queries)?

halfer
  • 19,824
  • 17
  • 99
  • 186
AsfK
  • 3,328
  • 4
  • 36
  • 73
  • Why do you want to replace `UpdateByQueryRequestBuilder` by `UpdateByQueryRequest`? [`UpdateByQueryRequestBuilder.filter()` calls `UpdateByQueryRequest.setQuery()`](https://github.com/elastic/elasticsearch/blob/master/server/src/main/java/org/elasticsearch/index/reindex/AbstractBulkByScrollRequestBuilder.java#L64-L67) underneath. – Val Dec 03 '19 at 09:57
  • @Val, first Thank you! I want to use `RestHighLevelClient` instaed of the old client, as I understand I need to replce `UpdateByQueryRequestBuilder` by `UpdateByQueryRequest`. The code in your link only doing set, but not adding new filter like here: https://github.com/elastic/elasticsearch/blob/08bf0aed43c682b57a65223d74513a9682c381eb/server/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java#L128-L134... I need to concatenate `dateQueryBuilder`, `a` and `b`... – AsfK Dec 03 '19 at 10:50
  • 2
    `filter` is not called on `UpdateByQueryRequestBuilder` but on `dateQueryBuilder` (since it's a bool query) that is then added via `setQuery` on `UpdateByQueryRequestBuilder`. – Val Dec 03 '19 at 10:56
  • @Val, Thank you very very much!!! I missed it – AsfK Dec 03 '19 at 11:03
  • @Val. can you add your answer please. – يعقوب Dec 13 '19 at 09:55
  • @Jacob, it's looks like this `.setQuery(dateQueryBuilder.filter(a).filter(b))` – AsfK Dec 15 '19 at 09:11

0 Answers0