四:es聚和函数Aggregations

1.格式 

"aggregations" : {
    "<aggregation_name>" : {
        "<aggregation_type>" : {
            <aggregation_body>
        }
        [,"meta" : {  [<meta_data_body>] } ]?
        [,"aggregations" : { [<sub_aggregation>]+ } ]?
    }
    [,"<aggregation_name_2>" : { ... } ]*
}

2. Metrics Aggregations 指标聚合

  • 数值指标聚合是一种特殊类型的指标聚合,可输出数值。一些聚合输出单个数值指标(例如avg),称为单值数字指标聚合,其他聚合则生成多个指标(例如stats),称为多值数字指标聚合。当这些值充当某些存储桶聚合的直接子聚合(某些存储桶聚合使您可以基于每个存储桶中的数字度量对返回的存储桶进行排序)时,单值和多值数字度量聚合之间的区别将发挥作用。

2.0 terms 对某一字段进行聚合

  "aggregations": {
    "my_agg1": {
      "terms": {
        "field": "tag_brand_id"
      }
    },
    "my_agg2": {
      "terms": {
        "field": "brand_cid_array"
      }
    }
  }

 

2.1 Avg Aggregation 平均

POST /exams/_search?size=0
{
    "aggs" : {
        "avg_grade" : { "avg" : { "field" : "grade" } }
    }
}
-------------------
{
    ...
    "aggregations": {
        "avg_grade": {
            "value": 75.0
        }
    }
}
聚合的名称(上面的avg_grade)也用作键,通过该键可以从返回的响应中检索聚合结果。

missing参数定义应如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值。
POST /exams/_search?size=0
{
    "aggs" : {
        "grade_avg" : {
            "avg" : {
                "field" : "grade",
                "missing": 10 
            }
        }
    }
}

2.2 Cardinality Aggregation 类似count

单值指标聚合,用于计算不同值的近似计数
假设您正在为商店的销售建立索引,并希望计算与查询匹配的已售产品的唯一数量:
POST /sales/_search?size=0
{
    "aggs" : {
        "type_count" : {
            "cardinality" : {
                "field" : "type"
            }
        }
    }
}
----------
{
    ...
    "aggregations" : {
        "type_count" : {
            "value" : 3
        }
    }
}

2.3 Extended Stats Aggregation 扩展统计汇总

extended_stats聚合是stats聚合的扩展版本,其中添加了其他指标,such as sum_of_squares, variance, std_deviation and std_deviation_bounds.
GET /exams/_search
{
    "size": 0,
    "aggs" : {
        "grades_stats" : { "extended_stats" : { "field" : "grade" } }
    }
}
-----------------------
{
    ...

    "aggregations": {
        "grades_stats": {
           "count": 2,
           "min": 50.0,
           "max": 100.0,
           "avg": 75.0,
           "sum": 150.0,
           "sum_of_squares": 12500.0,
           "variance": 625.0,
           "std_deviation": 25.0,
           "std_deviation_bounds": {
            "upper": 125.0,
            "lower": 25.0
           }
        }
    }
}

2.4 Max Aggregation 最大值

POST /sales/_search?size=0
{
    "aggs" : {
        "max_price" : { "max" : { "field" : "price" } }
    }
}
-------------------------
可以看出,聚合的名称(上面的max_price)也用作键,通过该键可以从返回的响应中检索聚合结果。
{
    ...
    "aggregations": {
        "max_price": {
            "value": 200.0
        }
    }
}

-----------------------------
假设我们索引中的文档价格以美元为单位,但是我们希望以欧元为单位计算最大值(在本例中,转换率为1.2)。我们可以使用值脚本将转化率应用于每个值,然后再进行汇总:
POST /sales/_search
{
    "aggs" : {
        "max_price_in_euros" : {
            "max" : {
                "field" : "price",
                "script" : {
                    "source" : "_value * params.conversion_rate",
                    "params" : {
                        "conversion_rate" : 1.2
                    }
                }
            }
        }
    }
}

2.5 Min Aggregation 最小值

POST /sales/_search?size=0
{
    "aggs" : {
        "min_price" : { "min" : { "field" : "price" } }
    }
}
------------------
{
    ...

    "aggregations": {
        "min_price": {
            "value": 10.0
        }
    }
}

2.6  Stats Aggregation 统计

The stats that are returned consist of: min, max, sum, count and avg.
POST /exams/_search?size=0
{
    "aggs" : {
        "grades_stats" : { "stats" : { "field" : "grade" } }
    }
}
-----
 "aggregations": {
        "grades_stats": {
            "count": 2,
            "min": 50.0,
            "max": 100.0,
            "avg": 75.0,
            "sum": 150.0
        }
    }

2.7 Sum Aggregation 总和

POST /sales/_search?size=0
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "match" : { "type" : "hat" }
            }
        }
    },
    "aggs" : {
        "hat_prices" : { "sum" : { "field" : "price" } }
    }
}
------------------
{
    ...
    "aggregations": {
        "hat_prices": {
           "value": 450.0
        }
    }
}

2.8 Returning only aggregation results 仅返回汇总结果

在许多情况下,需要汇总但不需要搜索匹配。对于这些情况,可以通过将size设置为0来忽略匹配。例如:
GET /twitter/_search
{
  "size": 0,
  "aggregations": {
    "my_agg": {
      "terms": {
        "field": "text"
      }
    }
  }
}

3. Bucket Aggregations 桶聚合

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值