gang_qi_xi_2 2023-01-10 09:10 采纳率: 69.2%
浏览 147
已结题

ES中用CollapseBuilder方法去重为什么只返回一条数据

ES中用CollapseBuilder方法去重为什么只返回一条数据?


CollapseBuilder collapseBuilder = new CollapseBuilder("Visit.person_id");//只能是keyword或数字
searchSourceBuilder.collapse(collapseBuilder);
String[] includes=["Visit.person id""Visit.visit_type"];//指定返回列
//searchSourceBuilder .fetchSource(includes, nul1);
searchSourceBuilder .query(boolOueryBuilder):
System.out.println("boolQueryBuilder1---"+boolQueryBuilder);
System.out.println("boolOueryBuilder2---"+searchSourceBuilder);
sdr_message.source(searchSourceBuilder);
  • 写回答

1条回答 默认 最新

  • |__WhoAmI__| 2023-01-10 09:28
    关注

    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
    

    仅供参考,望采纳,谢谢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月13日
  • 已采纳回答 1月13日
  • 创建了问题 1月10日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵