elasticsearch之aggs

聚合

聚合表示的是对某个索引(index)下的所有文档进行一些统计之类的操作,如下图1所示,将左边索引中的文档按照作者姓名进行分组,姓名相同的在一个组里,就可以分为下图右边的两个组,从中我们就可以得出名为allen的作者共写了两篇文章,名为smith的作者共写了三篇文章。在ES中,提供了丰富的语法,来进行对文档的统计操作,如对所有文档按照ip地址范围进行分组,对所有文档按照经纬度范围进行分组,对距离进行分组(如图2)等等。

在ES的语法中,分组称之为桶聚合(bucket),对桶内的文档进行一些数值计算,如求和,求最大等称之为指标聚合(metric),还有一些其他聚合如pipeline,matric,在此仅介绍下桶聚合和指标聚合。

图1.jpg
图2.jpg

桶聚合和指标聚合

根据上面我们桶聚合就是对所有文档按照某些规则进行分组,然后文档满足这些规则放入一个桶,不满足有放入另外一个桶。而指标集合指的是对文档集中的某一个字段进行数值上的操作,如求和,求最大最下等。

ES聚合语法模板(图3)

  1. 写关键字aggs
  2. 写聚合的名字
  3. 写聚合的类型(桶聚合和指标聚合),及在类型里写相应的逻辑

常见桶聚合类型

类型 说明
filter 筛选满足字段条件的文档
terms 对文档集按照某一字段的不同取值进行分组
range 对文档集按照某一字段的取值范围进行分组

注:terms中不能对text 类型进行操作

常见指标聚合类型

类型 说明
avg 对文档集中指定字段的值求平均值
max 对文档集中指定字段的值求最大值
min 对文档集中指定字段的值求最小值
sum 对文档集中指定字段的值求和
stats 对文档集中指定字段的值求统计信息,最大,最小,平均等
3.jpg

例子

以kibana_sample_data_ecommerce样本数据为例子

  1. 查询所有类别为男装的总税费价格
GET /kibana_sample_data_ecommerce/_search?
{
  "size":0,
  "aggs": {
    "filter_category": {
      "filter": {
        "term":{
          "category.keyword":"Men's Clothing"
        }
      },
      "aggs":{
        "sum_tax":{
          "sum":{
            "field":"taxful_total_price"
          }
        }
      }
    }
  }
}
# -----------------------------------------------------------------------
  "aggregations" : {
    "filter_category" : {
      "doc_count" : 2024,
      "sum_tax" : {
        "value" : 149393.91015625
      }
    }
  }
  1. 查询所有交易的平均税费还有不同类别下不同制造的平均税费
GET /kibana_sample_data_ecommerce/_search?size=0
{
  "aggs": {
    "all_sum_tax":{
      "sum":{
        "field":"taxful_total_price"
      }
    },
    "term_category": {
      "terms": {
        "field":"category.keyword"
      },
      "aggs":{
        "manufactur":{
          "terms":{
            "field":"manufacturer.keyword"
          },
          "aggs":{
            "avg_tax":{
              "avg":{
                "field":"taxful_total_price"
              }
            }
          }
        }
      }
    }
  }
}
# ------------------------------------------------------------------------------
{
"all_sum_tax" : {
      "value" : 350884.12890625
    }
      "buckets" : [
        {
          "key" : "Men's Clothing",
          "doc_count" : 2024,
          "manufactur" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "Elitelligence",
                "doc_count" : 1242,
                "avg_tax" : {
                  "value" : 67.25540333132045
                }
              },
              {
                "key" : "Low Tide Media",
                "doc_count" : 1125,
                "avg_tax" : {
                  "value" : 79.21282638888889
                }
              },
              {
                "key" : "Oceanavigations",
                "doc_count" : 600,
                "avg_tax" : {
                  "value" : 91.83341145833333
                }
              },
              {
                "key" : "Microlutions",
                "doc_count" : 308,
                "avg_tax" : {
                  "value" : 70.6087789163961
                }
              },
              ...
        }
      {....},
        ...,
      {....}]

参考

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html

你可能感兴趣的:(elasticsearch之aggs)