ElasticSearch 开发学习:聚合概念

ElasticSearch 开发学习:聚合概念

参考文档

  • 中文参考文档: Elasticsearch: 权威指南 » 聚合
  • 英文参考文档: Elasticsearch Guide [6.4] » Aggregations

聚合

聚合 是由 指标 组成的。通过聚合,我们可以得到一个数据的概览。聚合允许我们像数据提出一些复杂的问题。 Elasticsearch 中的聚合执行速度很快,像搜索一样几乎是实时的。所以对于报告和仪表盘来说,可以实时显示数据。

聚合和搜索是一起的,在单个请求里,可以同时对相同的数据进行搜索/过滤和分析。

要掌握聚合,只需要明白两个主要的概念:

  • (Buckets)

    满足特定条件的文档的集合

  • 指标(Metrics)

    对桶内的文档进行统计计算

这就是全部了!每个聚合都是 n >= 1 个桶 和 n >= 0 个指标的组合。参考2

当聚合开始被执行,每个文档里面的值通过计算来决定符合哪个条件的桶。如果匹配到,文档将放入相应的桶并接着进行聚合操作。

桶可以被嵌套在其他桶里面,提供层次化或者有条件的划分方案。例如,手机放入数码产品这个桶,数码产品放入商品这个桶。

Elasticsearch 有多种类型的桶,能够一多种方式划分文档(时间、年龄区间、地理位置)。根本原理都一样:基于条件划分文档。

指标

桶能让我们划分文档为有意义的集合,但我们最终需要的是对桶内的文档进行一些指标的计算。分桶是一种达到目的的手段:它提供
了一种给文档分组的方法,让我们可以计算感兴趣的指标。

大多数指标是简单的数学运算(例如最小值、平均值、最大值、还有汇总),这些是通过文档的值来计算。在实践中,可以用指标来
计算:平均薪资、最高出售价格等诸如此类的数据。

尝试聚合

聚合入门示例,参考官方中文文档尝试聚合

GET /cars/transactions/_search
{
    "size" : 0,
    "aggs" : { 
        "popular_colors" : { 
            "terms" : { 
              "field" : "color"
            }
        }
    }
}
  1. 聚合操作被置于顶层参数 aggs 之下(aggregations 也可以)。
  2. 为聚合指定一个名称: popular_colors 。
  3. 定义单个桶的类型 terms 。

聚合是在特定搜索结果背景下执行的,它是查询请求 /_search 的一个顶层参数。聚合可以与查询一起使用。

将size 设置为 0 来提高查询速度,因为我们并不关心搜索结果的具体内容。

“popular_colors” 是我们给聚合定义的名字,相应的结果会以我们定义的名字为标签。

在本例中,我们定义了一个单 terms 桶,这个 terms 桶会为每个碰到的唯一词项动态创建新的桶。因为我们
告诉它使用 color 字段,所以 terms 桶会为每个颜色动态创建新桶。

聚合结果:

{
...
   "hits": {
      "hits": [] 
   },
   "aggregations": {
      "popular_colors": { 
         "buckets": [
            {
               "key": "red", 
               "doc_count": 4 
            },
            {
               "key": "blue",
               "doc_count": 2
            },
            {
               "key": "green",
               "doc_count": 2
            }
         ]
      }
   }
}
  1. 因为设置了 size 参数,所以不会有 hits 搜索结果返回
  2. popular_colors 聚合是作为 aggregations 字段的一部分被返回的。
  3. 每个桶的 key 都与 color 字段里找到的唯一词对应。它总会包含 doc_count 字段,告诉我们包含该词项的文档数量。
  4. 每个桶的数量代表该颜色的文档数量。

响应包含多个桶,每个对应一个唯一颜色(例如:红 或 绿)。每个桶也包括 聚合进 该桶的所有文档的数量。例如,有四辆红色的车。
前面的这个例子完全是实时执行的:一旦文档可以被搜到,它就能被聚合。这也就意味着我们可以直接将聚合的结果源源不断的传入图形库,然后生成实时的仪表盘。 不久,你又销售了一辆银色的车,我们的图形就会立即动态更新银色车的统计信息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值