Elasticsearch 聚合字段aggregate-metric-double

https://www.elastic.co/guide/en/elasticsearch/reference/8.1/aggregate-metric-double.html

环境信息

  • Elasticsearch 8.1
  • Kibana 8.1
  • MacOS 10.14.6

描述

今天我们学习一下Elasticsearch的聚合字段类型,所谓聚合字段类型,类型设置为aggregate_metric_double作为一个对象,子字段可以有min,max,sum,value_count,当我们对字段设置为aggregate_metric_double类型的字段做聚合时,它能够直接使用子字段的值进行聚合,比如最大值就可以直接去子对象中max的值比较

参数

aggregate_metric_double类型的字段支持以下三个参数的设置

  • metrics

    必填、数组值、最少包含以下值的一个[min,max,sum,value_count]

  • default_metric

    聚合子字段查询,script的字段设置,字符串,必须是metrics数组中的一个

  • time_series_metric

    可选,字符串值,默认为空,支持counter,gauge,summary中的某一个。当前版本为预览功能,最新版参考

    https://www.elastic.co/guide/en/elasticsearch/reference/master/tsds.html#time-series-metric

    https://www.elastic.co/guide/en/elasticsearch/reference/master/aggregate-metric-double.html

使用

  • min 使用子字段的min字段进行聚合统计

  • max 使用子字段的max字段进行聚合统计

  • sum 使用子字段的sum字段进行聚合统计

  • value_count 使用子字段的value_count字段进行聚合统计

  • avg 这个比较特殊,他没有子字段,他使用sumvalue_count两个字段聚合的结果,也就是说聚合字段的子对象必须同时包含sumvalue_count

验证

如下是测试的例子,参考如下

  • 首先我们还是通过Kibana 创建一个索引,索引中就包含一个aggregate_metric_double类型的一个对象字段

    PUT my-index-006
    {
      "mappings": {
        "properties": {
          "zuiyu_agg_metric_field":{
            "type":"aggregate_metric_double",
            "metrics":["min","max","sum","value_count"],
            "default_metric":"max"   
            }
        }
      }
    }
    
  • 下面是插入测试数据

    POST _bulk
    {"index":{"_index":"my-index-006","_id":"1"}}
    {"zuiyu_agg_metric_field":{"min":100.00,"max":1000.00,"sum":5000.00,"value_count":10}}
    {"index":{"_index":"my-index-006","_id":"2"}}
    {"zuiyu_agg_metric_field":{"min":-10.00,"max":30.00,"sum":70.00,"value_count":8}}
    {"index":{"_index":"my-index-006","_id":"3"}}
    {"zuiyu_agg_metric_field":{"min":-90.00,"max":300.00,"sum":200.00,"value_count":5}}
    
    
  • 搜索聚合统计验证(?size=0 不反悔查询结果只返回聚合结果)

    GET my-index-006/_search?size=0
    {
      "aggs": {
        "zuiyu_min": {
          "min": {
            "field": "zuiyu_agg_metric_field"
          }
        },
        "zuiyu_max": {
          "max": {
            "field": "zuiyu_agg_metric_field"
          }
        },
        "zuiyu_sum": {
          "sum": {
            "field": "zuiyu_agg_metric_field"
          }
        },
        "zuiyu_value_count": {
          "value_count": {
            "field": "zuiyu_agg_metric_field"
          }
        },
        "zuiyu_avg": {
          "avg": {
            "field": "zuiyu_agg_metric_field"
          }
        }
      }
    }
    
  • 测试default_metric字段对查询时的默认匹配与排序

    GET my-index-006/_search
    {
      "query": {
        "term": {
          "zuiyu_agg_metric_field": {
            "value": "30"
          }
        }
      }
    }
    
    GET my-index-006/_search
    {
      "query": {
        "match_all": {}
      },
      "sort": [
        {
          "zuiyu_agg_metric_field": {
            "order": "asc"
          }
        }
      ]
    }
    

总结

字段类型为aggregate_metric_double的字段,可以设置metrics,支持minmaxsumvalue_countavg五中,其中avg不显示设置,avg取值sumvalue_count。设置字段之后我们之后的聚合操作可以直接使用类型为aggregate_metric_double字段的子对象中对应的max,min,sum,value_count进行聚合

本文由 mdnice 多平台发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch中,聚合(aggregation)是一种强大的数据分析工具,可以对文档进行统计分析并返回计算结果。其中,Metric聚合是一种聚合类型,它会对文档中的某些数值型字段进行统计计算,例如:平均值、最大值、最小值、总和等。 下面我们来看一下如何在Elasticsearch中使用Metric聚合进行数据分析。 假设我们有一个存储了销售数据的索引,其中每个文档都包含了产品的名称、价格、销售量等信息。我们想要统计该索引中所有产品的平均价格、最高价格、最低价格以及销售总量,可以使用以下的聚合查询DSL: ``` GET /sales/_search { "size": 0, "aggs": { "avg_price": { "avg": { "field": "price" } }, "max_price": { "max": { "field": "price" } }, "min_price": { "min": { "field": "price" } }, "total_sales": { "sum": { "field": "sales" } } } } ``` 在上述查询中,我们使用了四个不同的Metric聚合:avg(平均值)、max(最大值)、min(最小值)和sum(总和)。每个聚合都针对文档中的price和sales字段进行了计算,最终返回了平均价格、最高价格、最低价格以及销售总量的计算结果。 在聚合查询中,我们还可以使用多个Metric聚合组合起来进行更加复杂的数据分析。例如,我们可以计算不同销售区域的平均价格和销售总量,可以使用以下的聚合查询DSL: ``` GET /sales/_search { "size": 0, "aggs": { "by_region": { "terms": { "field": "region" }, "aggs": { "avg_price": { "avg": { "field": "price" } }, "total_sales": { "sum": { "field": "sales" } } } } } } ``` 在上述查询中,我们首先使用了terms聚合将文档按照region字段进行了分组,然后在每个分组中使用了两个不同的Metric聚合:avg(平均值)和sum(总和)。最终返回了不同销售区域的平均价格和销售总量的计算结果。 总之,Metric聚合Elasticsearch中非常有用的数据分析工具,可以帮助我们对文档中的数值型字段进行统计分析并返回计算结果。在实际应用中,我们可以根据具体的业务需求来选择不同的Metric聚合进行数据分析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值