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进行聚合


原文始发于微信公众号(醉鱼Java):Elasticsearch 聚合字段aggregate-metric-double

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/231669.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!