欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 【Elasticsearch】07-ES聚合

【Elasticsearch】07-ES聚合

2025/1/24 15:15:45 来源:https://blog.csdn.net/qq_45722630/article/details/144214236  浏览:    关键词:【Elasticsearch】07-ES聚合

1. 桶

桶(Bucket)聚合:用来对文档做分组

  • TermAggregation:按照文档字段值分组,例如按照品牌值分组、按照国家分组
  • Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组
# 聚合, 只能对keyword进行聚合
GET /items/_search
{"query": {"bool": {"filter": [{"term": {"category.keyword": "手机"}},{"range": {"price": {"gte": 100000}}}]}}, "size": 0,"aggs": {"category_agg": {"terms": {"field": "brand.keyword","size": 20}}}
}

2. Metric聚合

统计了价格高于3000的手机品牌,形成了一个个桶。现在我们需要对桶内的商品做运算,获取每个品牌价格的最小值、最大值、平均值。
这就要用到Metric聚合了,例如stat聚合,就可以同时获取min、max、avg等结果。

# 聚合, 只能对keyword进行聚合
GET /items/_search
{"query": {"bool": {"filter": [{"term": {"category.keyword": "手机"}},{"range": {"price": {"gte": 100000}}}]}}, "size": 0,"aggs": {"category_agg": {"terms": {"field": "brand.keyword","size": 20},"aggs": {"price_status": {"stats": {"field": "price"}}}}}
}

3. 使用JavaRestClient

    @Testvoid testAgg() throws IOException {// 1. 创建 RequestSearchRequest request = new SearchRequest("items");// 2. 组织请求参数request.source().query(QueryBuilders.boolQuery().filter(QueryBuilders.termQuery("category.keyword", "手机")).filter(QueryBuilders.rangeQuery("price").gte(100000))).size(0);// 2.1 聚合参数request.source().aggregation(AggregationBuilders.terms("brand_agg").field("brand.keyword").size(5));// 3. 发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4. 解析响应Aggregations aggregations = response.getAggregations();// 4.1 获取品牌聚合Terms brandTerms = aggregations.get("brand_agg");// 5.2 获取聚合中的桶List<? extends Terms.Bucket> buckets = brandTerms.getBuckets();// 5.3 遍历桶内数据for(Terms.Bucket bucket:buckets) {// 5.4 获取桶内keyString brand = bucket.getKeyAsString();System.out.println("brand=" + brand);long count = bucket.getDocCount();System.out.println("count=" + count);}}

版权声明:

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

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