0

我正在尝试UpdateByQueryRequest在java中使用。问题是,我在eclipse. 我正在使用java RestHighLevelClient. 这是一个例子

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

我收到了 2 条建议。第一个没有 SearchRequest对象,第二个 SearchRequest对象

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

我无法setQuery像在 ES 中的其他地方一样使用。另一方面setScript工作

updateByQueryRequest.setQuery()

是否有其他语法可以做到这一点?

4

1 回答 1

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是开源的,所以不会可能的法律问题),我还建议您上传库或重新下载并检查问题是否仍然存在。

于 2021-07-09T11:19:15.430 回答