学无先后,达者为师

网站首页 编程语言 正文

ES聚合查询+条件搜索的实现

作者:桂亭亭 更新时间: 2023-07-04 编程语言

 

    public void bucketGroup() {
        SearchRequest request = new SearchRequest();

        /**
         * 查询条件
         */
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        request.indices("smsp_collect_info_new");
        // 查询某城市
        searchSourceBuilder.query(QueryBuilders.matchQuery("city", integer));
        // 构建聚合查询,并统计数量
        //  AggregationBuilders.terms("your_agg_name").field("master_port"),表示对master_port字
        //   段进行聚合,相当于sql group by master_port,其中your_agg_name是我们对聚合字段起的别名
        //  ,到时候我们就可以通过这个别名获取到聚合的数量
        // AggregationBuilders.count("count_number").field("id"))表示对id字段进行count,就是计数,
        // 其中count_number是我们为计数字段起的别名,同上方一个道理, 此转换为sql应该是select count(id)
        //    from xx where city=xx group by master_port;
        searchSourceBuilder.aggregation(AggregationBuilders
                .terms("your_agg_name")
                .field("master_port")
                .subAggregation(AggregationBuilders.count("count_number")
                        .field("id")).size(10000));

        //放入文档中
        request.source(searchSourceBuilder);
        //远程查询
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //元素数量
        SearchHits hits1 = response.getHits();
        // 获取聚合结果给
        Terms termsAggregation = response.getAggregations().get("your_agg_name");
        // 桶聚合
        for (Terms.Bucket bucket : termsAggregation.getBuckets()) {
        // 获取聚合的key的值,也就是master_port的每一项的值
            String key = bucket.getKeyAsString();
        // 获取当前的master_count的聚合的数量
            ValueCount countAggregation = bucket.getAggregations().get("count_number");
            long countValue = countAggregation.getValue();
        }
    }

原文链接:https://blog.csdn.net/qq_53679247/article/details/131471297

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新