Elasticsearch 聚合字段aggregate-metric-double

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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进行聚合


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
6月前
|
Oracle 关系型数据库 API
实时计算 Flink版产品使用合集之当sink到elasticsearch时,可以指定es的指定字段吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用合集之当sink到elasticsearch时,可以指定es的指定字段吗
|
2月前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
3月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
83 1
|
5月前
|
SQL 安全 数据挖掘
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
Elasticsearch聚合查询用于复杂数据分析,包括统计空值率。示例展示了如何计算字段`my_field`非空非零文档的百分比。查询分为三步:总文档数计数、符合条件文档数计数及计算百分比。聚合概念涵盖度量、桶和管道聚合。脚本在聚合中用于动态计算。常见聚合类型如`sum`、`avg`、`date_histogram`等。组合使用可实现多值统计、嵌套聚合和空值率计算。[阅读更多](https://zhangfeidezhu.com/?p=515)
294 0
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
|
5月前
|
存储 缓存 自然语言处理
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
|
5月前
|
缓存 Java API
在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)
在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)
|
6月前
|
搜索推荐 JavaScript Java
Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?
Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?
87 0
|
6月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之源MySQL表新增字段后,要同步这个改变到Elasticsearch的步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
运维 测试技术 数据处理
Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!
Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!
65 0
|
6月前
|
存储 缓存 Java
Elasticsearch 8.X 聚合查询下的精度问题及其解决方案
Elasticsearch 8.X 聚合查询下的精度问题及其解决方案
167 0