在 java 客户端中使用 UpdateByQueryRequest

Using UpdateByQueryRequest in java client

我正在尝试在 java 中使用 UpdateByQueryRequest。问题是,我在 eclipse 中得到了不同的语法建议。我正在使用 java RestHighLevelClient。这是一个例子

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

我收到了 2 条建议。第一个是 without SearchRequest object 第二个是 with SearchRequest object

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

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

updateByQueryRequest.setQuery()

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

您也可以使用 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 有问题,您可以尝试反编译 class 并检查是否方法是有的(ElasticSearch是开源的,不会有法律问题),也建议大家上传库或者重新下载看看问题是否还存在。