当前位置: 首页 > article >正文

ES-针对某个字段去重后-获取某个字段值的所有值

针对上面表的数据,现在想根据age分组,并获取每个分组后的name有哪些(去重后)。

select age, GROUP_CONCAT(DISTINCT(name)) from testtable group by age ;

结果: 

如果想要增加排序:

SELECT 
    age, 
    GROUP_CONCAT(DISTINCT name) AS names,
    COUNT(DISTINCT name) AS name_count
FROM 
    testtable 
GROUP BY 
    age
ORDER BY 
    name_count DESC;

结果:

使用ES实现类似上面的SQL效果:

SearchRequest searchRequest = new SearchRequest("indexName");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(0);
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
       
        //时间范围
         RangeQueryBuilder pubtimeBuilder = QueryBuilders.rangeQuery("pubtime").gte(stime).lte(etime);
            boolQueryBuilder.must(pubtimeBuilder);
     
        searchSourceBuilder.query(boolQueryBuilder);

        // 添加 cardinality 聚合 
           AggregationBuilder  cardinalityAggregationBuilder = AggregationBuilders
                    .cardinality("unique_organ_id")
                    .field("organ_id");

              // 添加 terms 聚合以获取去重后的具体数据
           AggregationBuilder  termsAggregationBuilder = AggregationBuilders
                    .terms("distinct_ids")
                    .field("organ_id")
                    .size(10000);//根据实际的确定

        searchSourceBuilder.aggregation(cardinalityAggregationBuilder);
        searchSourceBuilder.aggregation(termsAggregationBuilder);
        searchRequest.source(searchSourceBuilder);

        try {
            SearchResponse searchResponse = elasticsearchClient.search(searchRequest, RequestOptions.DEFAULT);
            ParsedCardinality uniqueMcnOrganIdAgg = searchResponse.getAggregations().get("unique_organ_id");
            total = uniqueMcnOrganIdAgg.getValue();
            if(total > 0){
                Terms terms = searchResponse.getAggregations().get("distinct_ids");
                for (Terms.Bucket bucket : terms.getBuckets()) {
                    String mcnOrganId = bucket.getKeyAsString();
                    ids.add(mcnOrganId);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        Result result = new Result();
        result.setIds(ids);
        result.setTotal(total);
        return result;


http://www.kler.cn/a/397164.html

相关文章:

  • Qt 项目架构设计
  • 什么是PostgreSQL,有什么特点
  • 【优选算法 — 滑动窗口】水果成篮 找到字符串中所有字母异位词
  • .NET 9 中 IFormFile 的详细使用讲解
  • web与网络编程
  • 聊天服务器(9)一对一聊天功能
  • influxDB 时序数据库安装 flux语法 restful接口 nodjsAPI
  • 怎么样去挑选适合的CMS建站系统?
  • AI写作(十)发展趋势与展望(10/10)
  • 精密机加工 —— 工业制造的核心力量!
  • STM32寄存器结构体详解
  • Android View 调用基础 通用属性基础 方法场景说明
  • 241115-如何用sklearn做一个简单线性回归
  • 如何实现主备租户的无缝切换 | OceanBase应用实践
  • Ubuntu24.04配置安装可视化terminal终端
  • 解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url
  • React Native 全栈开发实战班 - 用户界面进阶之自定义组件开发
  • electron安装遇到的问题
  • (一)Ubuntu20.04服务器端部署Stable-Diffusion-webui AI绘画环境
  • UG Motion学习笔记2【正解 反解】
  • HarmonyOS 开发环境搭建
  • keep-alive多级页面缓存实现
  • 商品规格递归拼接
  • 【JAVA】Java基础—面向对象编程:多态—多态的概念
  • 不可变对象:并发编程的“安全岛”
  • ubuntu22 安装 minikube