您的位置:首页 > 房产 > 建筑 > 广州市住房住建局网站_鞍山贴吧_百度网盘app官方下载_谷歌的推广是怎么样的推广

广州市住房住建局网站_鞍山贴吧_百度网盘app官方下载_谷歌的推广是怎么样的推广

2025/3/6 11:11:27 来源:https://blog.csdn.net/2201_75732091/article/details/146006149  浏览:    关键词:广州市住房住建局网站_鞍山贴吧_百度网盘app官方下载_谷歌的推广是怎么样的推广
广州市住房住建局网站_鞍山贴吧_百度网盘app官方下载_谷歌的推广是怎么样的推广

目录

DSL 实现数据聚合

Bucket聚合

带条件聚合

Metric聚合

Java API 实现数据聚合

Bucket聚合

带条件聚合

metric聚合


聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。

DSL 实现数据聚合

Bucket聚合

场景:统计所有商品中共有哪些商品品牌,其实就是以品牌(brand)字段对数据分组。

# bucket聚合
GET /items/_search
{"size": 0,"aggs": {"cate_aggs": {"terms": {"field": "brand","size": 10}}}
}

实现效果如下:(对品牌进行分组)

带条件聚合

场景:查找按品牌(brand)分组,且价格(price)在(100,2000)的手机(name)

# 带条件聚合
GET /items/_search
{"query": {"bool": {"filter": [{"term": {"name": "手机"}},{"range": {"price": {"gte": 10000,"lte": 2000000}}}]}},"size": 0,"aggs": {"brand_agg": {"terms": {"field": "brand","size": 10}}}
}

实现效果如下:

Metric聚合

场景:查找按照品牌分类的手机的价格的最小值、最大值、平均值。

# metric聚合
GET /items/_search
{"query": {"bool": {"filter": [{"term": {"name": "手机"}}]}},"size": 0,"aggs": {"brand_agg": {"terms": {"field": "category","size": 10},"aggs": {"price_stats": {"stats": {"field": "price"}}}}}
}

实现效果如下:

Java API 实现数据聚合

Bucket聚合

 /*** 聚合* @throws IOException*/@Testvoid testAggs() throws IOException {// 1.创建RequestSearchRequest request = new SearchRequest("items");// 2.组织请求参数// 2.1.query条件request.source().size(0);// 2.2.聚合条件String brandAggName = "brandAgg";request.source().aggregation(AggregationBuilders.terms(brandAggName).field("brand").size(5));// 3.发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4.解析响应Aggregations aggregations = response.getAggregations();// 4.1.获取聚合结果Terms brandTerms = aggregations.get(brandAggName);// 4.2.获取bucketsList<? extends Terms.Bucket> buckets = brandTerms.getBuckets();// 4.3.遍历bucketsfor (Terms.Bucket bucket : buckets) {// 4.4.获取key,就是品牌名称String brand = bucket.getKeyAsString();// 4.5.获取doc_count,就是品牌对应的文档数量long docCount = bucket.getDocCount();System.out.println("品牌:" + brand + ",数量:" + docCount);}}

实现效果如下:

带条件聚合

 /*** 带条件聚合查询* @throws IOException*/@Testvoid testAggs() throws IOException {// 1.创建RequestSearchRequest request = new SearchRequest("items");// 2.组织请求参数request.source().query(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", "手机")).filter(QueryBuilders.rangeQuery("price").lt(10000000)));// 2.1.聚合条件String brandAggName = "brandAgg";request.source().aggregation(AggregationBuilders.terms(brandAggName).field("brand").size(5));// 3.发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4.解析响应Aggregations aggregations = response.getAggregations();// 4.1.获取聚合结果Terms brandTerms = aggregations.get(brandAggName);for (Terms.Bucket bucket : brandTerms.getBuckets()) {// 4.2.获取key,就是品牌名称String brand = bucket.getKeyAsString();// 4.3.获取doc_count,就是品牌对应的文档数量long docCount = bucket.getDocCount();System.out.println("品牌:" + brand + ",数量:" + docCount);}}

实现效果如下:

metric聚合

  /***  metric聚合* @throws IOException*/@Testvoid testMetricAggs() throws IOException {// 1.创建RequestSearchRequest request = new SearchRequest("items");// 2.组织请求参数request.source().query(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", "手机")));// 2.1.聚合条件String brandAggName = "brandAgg";request.source().aggregation(AggregationBuilders.terms(brandAggName).field("brand").size(5).subAggregation(AggregationBuilders.avg("priceAvg").field("price")).subAggregation(AggregationBuilders.max("priceMax").field("price")).subAggregation(AggregationBuilders.min("priceMin").field("price")));// 3.发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4.解析响应Aggregations aggregations = response.getAggregations();// 4.1.获取聚合结果Terms brandTerms = aggregations.get(brandAggName);for (Terms.Bucket bucket : brandTerms.getBuckets()) {// 4.2.获取key,就是品牌名称String brand = bucket.getKeyAsString();// 4.3.获取doc_count,就是品牌对应的文档数量long docCount = bucket.getDocCount();// 4.4.获取子聚合结果Avg priceAvg = bucket.getAggregations().get("priceAvg");Max priceMax = bucket.getAggregations().get("priceMax");Min priceMin = bucket.getAggregations().get("priceMin");System.out.println("品牌:" + brand + ",数量:" + docCount + "," +"平均价格:" + priceAvg.getValue() + ",最高价格:" + priceMax.getValue() + ",最低价格:" + priceMin.getValue());}}

实现效果如下:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com