Elasticsearch 8.x新Java API中如何实现Collapse功能?
Elasticsearch 8.x Java API 实现结果折叠(Collapse)去重
对应你原来的DSL查询,在Elasticsearch 8.x的新Java客户端(co.elastic.clients:elasticsearch-java)中,可以通过SearchRequest.Builder的链式调用直接配置折叠逻辑,同时保留原有的查询条件和分页参数。以下是完整的实现代码:
import co.elastic.clients.elasticsearch.core.SearchRequest; import co.elastic.clients.elasticsearch.core.SearchResponse; import co.elastic.clients.elasticsearch._types.query_dsl.Query; import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders; import co.elastic.clients.elasticsearch._types.CollapseBuilders; import co.elastic.clients.elasticsearch._types.Hit; // 构建match查询 Query matchQuery = QueryBuilders.match() .field("message") .query("GET /search") .build(); // 构建带折叠配置的搜索请求 SearchRequest request = new SearchRequest.Builder() .index("my-index-000001") // 替换为你的索引名 .query(matchQuery) // 添加查询条件 .collapse(CollapseBuilders.field("user.id")) // 配置按user.id折叠去重 .from(0) // 设置起始偏移量 .build(); // 执行搜索并处理结果 SearchResponse<Product> search = client.search(request, Product.class); List<Hit<Product>> hits = search.hits().hits();
关键配置说明
- 折叠逻辑:通过
CollapseBuilders.field("user.id")创建折叠规则,对应DSL中的collapse.field配置,实现按user.id字段去重,每个唯一的user.id仅返回第一条匹配的文档。 - 查询条件:使用
QueryBuilders.match()构建原DSL中的match查询,通过query()方法注入到搜索请求中。 - 分页参数:直接通过
from()方法设置起始偏移量,和旧API的逻辑保持一致。
内容的提问来源于stack exchange,提问作者IanIsAFK
相关产品推荐
相关产品推荐

