在 Elasticsearch 7.x 版本及之后,withQuery
方法的用法和 API 发生了一些变化,尤其是在 Java 客户端的使用上。具体来说,以下是主要的变化:
1. SearchSourceBuilder
的使用
在 Elasticsearch 7.x 版本中,通常使用 SearchSourceBuilder
来构建查询,而不是像之前那样直接使用 NativeQueryBuilder
(该类主要用于低级 API)。SearchSourceBuilder
提供了更丰富和灵活的 API 来构建复杂的查询请求。
2. QueryBuilders
的变化
QueryBuilders
类中的方法和查询构造方式在 7.x 版本中保持一致,但其配套使用的构建类有所变化。你需要使用 SearchSourceBuilder
来设置查询条件。
3. 示例代码(适用于 Elasticsearch 7.x)
在 Elasticsearch 7.x 版本中,你通常会使用 SearchSourceBuilder
来构建查询请求。例如,以下是一个将 multiMatchQuery
与 SearchSourceBuilder
结合使用的示例:
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.search.highlight.HighlightBuilder;
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
.query(QueryBuilders.multiMatchQuery("互联网寒冬", "title", "content"))
.sort("type", SortOrder.DESC)
.sort("score", SortOrder.DESC)
.sort("createTime", SortOrder.DESC)
.from(0)
.size(10)
.highlighter(new HighlightBuilder()
.field(new HighlightBuilder.Field("title").preTags("<em>").postTags("</em>"))
.field(new HighlightBuilder.Field("content").preTags("<em>").postTags("</em>"))
);
4. 构建请求
在构建查询请求时,你将使用 SearchRequest
和 SearchSourceBuilder
来设置查询条件,然后提交请求:
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
SearchRequest searchRequest = new SearchRequest("your_index_name");
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
5. SearchSourceBuilder
的功能
query
:设置查询条件。sort
:设置排序方式。from
和size
:设置分页。highlighter
:设置高亮显示。
总结
在 Elasticsearch 7.x 版本中,推荐使用 SearchSourceBuilder
类来构建查询请求,而 NativeQueryBuilder
主要用于旧版或低级 API。SearchSourceBuilder
提供了更全面的查询构建功能,可以方便地组合查询、排序、分页和高亮显示等功能。