CollapseBuilder里的参数表示把所有满足条件的文档折叠在一起,只返回一条数据,这一条数据包含了所有折叠的文档的信息。所以当使用CollapseBuilder去重时,只会返回一条数据。
如果想返回所有不同的文档,可以使用"terms"聚合来去重。具体方法是:
在查询求中添加一个"terms"聚合,聚合字段为想要去重的字段。
在查询求中添加一个"top_hits"聚合,然后设置"size"参数为1,表示每个分组只返回一条数据。
这样就可以返回所有不同的文档了。
具体实现方法可以参考这个例子:
SearchRequest searchRequest = new SearchRequest("my_index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 添加一个"terms"聚合,聚合字段为"field1"
TermsAggregationBuilder aggregation = AggregationBuilders.terms("unique_values").field("field1");
// 添加一个"top_hits"聚合,只返回一条数据
TopHitsAggregationBuilder topHits = AggregationBuilders.topHits("top_hits").size(1);
// 将"top_hits"聚合加入"terms"聚合
aggregation.subAggregation(topHits);
// 将聚合加入查询求
searchSourceBuilder.aggregation(aggregation);
searchRequest.source(searchSourceBuilder);
// 执行查询求
SearchResponse searchResponse = client.search(searchRequest);
// 解析返回结果
Terms uniqueValues = searchResponse.getAggregations().get("unique_values");
for (Terms.Bucket bucket : uniqueValues.getBuck
仅供参考,望采纳,谢谢。