代码之家  ›  专栏  ›  技术社区  ›  rock321987

在java客户端中使用UpdateByQueryRequest

  •  0
  • rock321987  · 技术社区  · 3 年前

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

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

    我收到了两条建议。第一个是 没有 SearchRequest 对象,第二个是 具有 搜索请求 对象

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

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

    updateByQueryRequest.setQuery()
    

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

    0 回复  |  直到 3 年前
        1
  •  1
  •   Alberto Chaves    3 年前

    您还可以使用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是开源的,因此这不会是一个可能的法律问题),我还建议您上传或再次下载库,并检查问题是否仍然存在。