Использование UpdateByQueryRequest в java-клиенте

Я пытаюсь использовать UpdateByQueryRequestв java. Проблема в том, что я получаю другое предложение синтаксиса в eclipse. я использую java RestHighLevelClient. Вот пример

      import org.elasticsearch.index.reindex.UpdateByQueryRequest;
SearchRequest searchRequest = new SearchRequest(index).types(type);

Я получаю 2 предложения. Первый без объекта, а второй с SearchRequest объект

      UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest();
UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest(searchRequest);

Я не могу использовать setQueryкак и везде в ES. С другой стороны setScript работает

      updateByQueryRequest.setQuery()

Есть ли другой синтаксис для этого?

1 ответ

Вы также можете использовать внутреннюю реализацию setQuery():

      public UpdateByQueryRequest setQuery(QueryBuilder query) {
  if (query != null) {
    this.getSearchRequest().source().query(query);
  }

  return this;
}

Ваш окончательный код будет выглядеть так:

      UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest(searchRequest);
if (query != null) {
   updateByQueryRequest.getSearchRequest().source().query(query);
}

Если у вас нет доступа к updateByQueryRequest.getSearchRequest(), возможно, проблема в библиотеке или в вашей IDE, вы можете попробовать декомпилировать класс и проверить, существует ли метод (ElasticSearch является открытым исходным кодом, поэтому он не будет возможная юридическая проблема), также я рекомендую вам загрузить библиотеку или загрузить ее снова и проверить, сохраняется ли проблема.

Другие вопросы по тегам