es 时间字段聚合_ES之五:ElasticSearch聚合

本文介绍了Elasticsearch(ES)的聚合功能,包括Bucket和Metrics两大类,如AVG、Cardinality等统计指标。通过实例展示了如何进行单值和多值聚合,并提到了聚合缓存和优化策略,例如size=0请求的缓存效果。
摘要由CSDN通过智能技术生成

前言

说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提取统计指标时变得游刃有余。同样的工作,你在Hadoop中可能需要写mapreduce或Hive,在mongo中你必须得用大段的mapreduce脚本,而在ES中仅仅调用一个API就能实现了。

开始之前,提醒老司机们注意,ES原有的聚合功能Facets在新版本中将被正式被移除,抓紧时间用Aggregations替换Facets吧。Facets真的很慢!

1 关于Aggregations

Aggregations的部分特性类似于SQL语言中的group by,avg,sum等函数。但Aggregations API还提供了更加复杂的统计分析接口。

掌握Aggregations需要理解两个概念:

桶(Buckets):符合条件的文档的集合,相当于SQL中的group by。比如,在users表中,按“地区”聚合,一个人将被分到北京桶或上海桶或其他桶里;按“性别”聚合,一个人将被分到男桶或女桶

指标(Metrics):基于Buckets的基础上进行统计分析,相当于SQL中的count,avg,sum等。比如,按“地区”聚合,计算每个地区的人数,平均年龄等

对照一条SQL来加深我们的理解:

SELECT COUNT(color) FROM table GROUP BY color

GROUP BY相当于做分桶的工作,COUNT是统计指标。

下面介绍一些常用的Aggregations API。

2 Metrics

2.1 AVG

2.2 Cardinality

2.3 Stats

2.4 Extended Stats

2.5 Percentiles

2.6 Percentile Ranks

3 Bucket

3.1 Filter

3.2 Range

3.3 Missing

3.4 Terms

3.5 Date Range

3.6 Global Aggregation

3.7 Histogram

3.8 Date Histogram

3.9 IPv4 range

3.10 Return only aggregation results

4 聚合缓存

ES中经常使用到的聚合结果集可以被缓存起来,以便更快速的系统响应。这些缓存的结果集和你掠过缓存直接查询的结果是一样的。因为,第一次聚合的条件与结果缓存起来后,ES会判断你后续使用的聚合条件,如果聚合条件不变,并且检索的数据块未增更新,ES会自动返回缓存的结果。

注意聚合结果的缓存只针对size=0的请求(参考3.10章节),还有在聚合请求中使用了动态参数的比如Date Range中的now(参考3.5章节),ES同样不会缓存结果,因为聚合条件是动态的,即使缓存了结果也没用了。

先加入几条index数据,如下:

curl -XPUT 'localhost:9200/testindex/orders/2?pretty' -d '{

"zone_id": "1",

"user_id": "100008",

"try_deliver_times": 102,

"trade_status": "TRADE_FINISHED",

"trade_no": "xiaomi.21142736250938334726",

"trade_currency": "CNY",

"total_fee": 100,

"status": "paid",

"sdk_user_id": "69272363",

"sdk": "xiaomi",

"price": 1,

"platform": "android",

"paid_channel": "unknown",

"paid_at": 1427370289,

"market": "unknown",

"location": "local",

"last_try_deliver_at": 1427856948,

"is_guest": 0,

"id": "fa6044d2fddb15681ea2637335f3ae6b7f8e76fef53bd805108a032cb3eb54cd",

"goods_name": "一小堆元宝",

"goods_id": "ID_001",

"goods_count": "1",

"expires_in": 2592000,

"delivered_at": 0,

"debug_mode": true,

"created_at": 1427362509,

"cp_result": "exception encountered",

"cp_order_id": "cp.order.id.test"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值