You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:15:49