Elasticsearch聚合介绍:度量聚合(metric aggregation)和桶聚合(bucket aggregation)

Elasticsearch聚合分为两种类型,度量聚合(metric aggregation)和桶聚合(bucket aggregation)。

定义和适用范围

  • 度量聚合:接收一个输入文档集并生成至少一个统计值。一遍使用min、max、sum、avg进行聚合,另外还支持通过脚本、value_count、stats、extended_stats进行度量聚合。
  • 桶聚合:桶聚合返回很多子集,并限定输入数据到一个特殊的叫做桶的子集中。一遍使用term、range、date_range、histogram、date_histogram、nested、missing、IPv4 range、时区、geo_distance、geohash_grid进行桶聚合。

举例使用

1. 创建测试数据, 参考文章elasticsearch aggregations 之一:引入buckets、metrics_w1346561235的博客-CSDN博客,创建es索引。该案例假定es有一个index,存储了某家汽车经销商的销售信息:包括车的售价、销售时间、车身颜色、生产厂商等。

1.1 创建索引结构,可通过postman来进行操作。

 1.2 通过_bulk往es索引批量导入文档

 1.3 查询索引中的所有文档

2. 对汽车的价格price字段进行平均值avg指标聚合。

 补充说明:

cars/_search:表示在cars索引中,进行search请求。

"size": 0, 表示返回结果集中显示满足条件的文档记录为0条。(即不显示满足条件的文档记录)。

”aggs"  为顶层关键字,表示aggregation聚合操作

"avg_price"为自定义名称。

"avg" 平均值度量。

“field": "price" 对price字段进行度量聚合。

在返回的aggregations->avg_price->value中,可看到最后度量聚合结果为26500.0,算出该经销商卖出汽车的平均价格。

3. 桶聚合类型1:terms桶聚合,为字段中每种词条创建一个桶。下面对汽车颜色进行terms桶聚合。

 补充说明:

”cts_by_color"为自定义桶聚合名称。

"aggs" 顶层关键字,表示聚合操作。

“terms" 关键字表示该聚合为term桶类型。

"field": "color" 表示基于color字段进行term类型桶聚合。

从返回结果aggregations->buckets集合中,可看到red桶聚合有4条记录,blue桶聚合有2条记录,gree桶聚合有2条记录。

4. 桶聚合类型2:range桶聚合,使用定义的范围来创建桶。下面对汽车价格进行range桶聚合。

”price_range" 为自定义桶聚合名称。

 "range" 关键字表示range类型桶聚合。

“filed": "price" 对price字段进行range类型桶聚合。

”ranges" 关键字表示range集合。

第一种range: {"from": 10000, "to": 80000}, 上界包含,下界不包含。

第二种range: {"from": 80000}。

从返回结果aggregations->price_range->buckets,可看到价格范围{"from": 10000, "to": 80000}的文档记录数有7条,{"from": 80000}的有1条。

5. 桶聚合类型3:date_range桶聚合,类似于range桶聚合,但它专用在使用日期类型的字段。下面对汽车销售时间进行date_range桶聚合。

 补充说明类似于range桶聚合。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch 聚合查询(Aggregation)是一种用于对数据进行多维度分析的功能。聚合查询可以用于分析数据的分布情况、计算数据的统计信息、生成图表等。在 Elasticsearch 中,聚合查询是通过使用特定的聚合器(Aggregator)来完成的。 Java 中使用 Elasticsearch 聚合查询需要使用 Elasticsearch Java API。首先需要创建一个 SearchRequest 对象,并设置需要查询的索引和查询条件。然后创建一个 AggregationBuilder 对象,用于定义聚合查询的规则和参数。最后将 AggregationBuilder 对象添加到 SearchRequest 中,执行查询操作。 以下是一个简单的 Java 代码示例,用于查询某个索引下的数据,并按照某个字段进行分组聚合查询: ``` SearchRequest searchRequest = new SearchRequest("index_name"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("group_by_field").field("field_name"); searchSourceBuilder.aggregation(aggregationBuilder); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); Terms terms = searchResponse.getAggregations().get("group_by_field"); for (Terms.Bucket bucket : terms.getBuckets()) { String key = bucket.getKeyAsString(); long count = bucket.getDocCount(); System.out.println("key: " + key + ", count: " + count); } ``` 在上面的代码中,首先创建了一个 SearchRequest 对象,设置需要查询的索引和查询条件。然后创建了一个 TermsAggregationBuilder 对象,用于按照某个字段进行分组聚合查询。最后将 TermsAggregationBuilder 对象添加到 SearchRequest 中,执行查询操作。 查询结果会返回一个 Terms 对象,其中包含了分组聚合查询的结果。可以使用 Terms 对象的 getBuckets() 方法获取分组聚合查询的结果列表。每个分组聚合查询结果由一个 Terms.Bucket 对象表示,其中包含了分组聚合查询的键值和文档数量等信息。 以上是简单的聚合查询示例,Elasticsearch 聚合查询功能非常强大,支持多种聚合器和聚合规则,可以根据具体需求进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值