【官方文档翻译】映射 - 聚合度量字段类型 - Elasticsearch

82 阅读2分钟

聚合度量字段类型

度量聚合存储预聚合的度量值。一个 aggregate_metric_double 字段是一个对象,此对象包含了一个或多个下面的度量子字段:min, max, sumvalue_count
当你在一个 aggregate_metric_double 字段上运行某些度量聚合时,此聚合使用相关的子字段的值。例如,在一个 aggregate_metric_double字段上的 min 聚合将返回所有 min 子字段的最小值。

一个 aggregate_metric_double 字段为每一个度量子字段存储一个单独数字化 doc 值。数组值是不被支持的。min, maxsumdouble 数字。value_count 是一个正的 long 数字。

PUT my-index
{
  "mappings": {
    "properties": {
      "my-agg-metric-field": {
        "type": "aggregate_metric_double",
        "metrics": [ "min", "max", "sum", "value_count" ],
        "default_metric": "max"
      }
    }
  }
}

aggregate_metric_double 字段的参数

metrics : (必须,字符串数组)要存储的度量子字段组成的数组。每个值对应一个度量聚合。有效的值是 min, max, sumvalue_count。你必须至少指定一个值。
default_metric : (必须,字符串)用于那些不使用一个子字段的查询、脚本和聚合的默认度量子字段。必须是 metrics 数组里的一个值。

1. 使用

我们设计 aggregate_metric_double 字段用于以下的聚合:

  • 一个 min 聚合返回所有 min 子字段值的最小值。
  • 一个 max 聚合返回所有 max 子字段值的最大值。
  • 一个 sum 聚合返回所有 sum 子字段值的和。
  • 一个 value_count 聚合返回所有 value_count 子字段值的和。
  • 一个 avg 聚合。没有 avg 子字段;使用 sumvalue_count 度量计算 avg 聚合的结果。要运行一个 avg 聚合,字段里必须包含有 sumvalue_count 度量子字段。

aggregate_metric_double 字段上运行任何其它的聚合将运行失败并产生一个 "unsupported aggregation" 错误。

2. 例子

下面的创建索引API 请求创建一个名为 agg_metricaggregate_metric_double 字段的索引。这个请求将 max 设为字段的 default_metric

PUT stats-index
{
  "mappings": {
    "properties": {
      "agg_metric": {
        "type": "aggregate_metric_double",
        "metrics": [ "min", "max", "sum", "value_count" ],
        "default_metric": "max"
      }
    }
  }
}

下面的索引API 请求添加 agg_metric 字段里带有预聚合数据的文档。

PUT stats-index/_doc/1
{
  "agg_metric": {
    "min": -302.50,
    "max": 702.30,
    "sum": 200.0,
    "value_count": 25
  }
}

PUT stats-index/_doc/2
{
  "agg_metric": {
    "min": -93.00,
    "max": 1702.30,
    "sum": 300.00,
    "value_count": 25
  }
}

你可以在 agg_metric 字段上运行 min, max, sum, value_countave 聚合。

POST stats-index/_search?size=0
{
  "aggs": {
    "metric_min": { "min": { "field": "agg_metric" } },
    "metric_max": { "max": { "field": "agg_metric" } },
    "metric_value_count": { "value_count": { "field": "agg_metric" } },
    "metric_sum": { "sum": { "field": "agg_metric" } },
    "metric_avg": { "avg": { "field": "agg_metric" } }
  }
}

聚合的结果基于关联的度量子字段的值。

{
...
  "aggregations": {
    "metric_min": {
      "value": -302.5
    },
    "metric_max": {
      "value": 1702.3
    },
    "metric_value_count": {
      "value": 50
    },
    "metric_sum": {
      "value": 500.0
    },
    "metric_avg": {
      "value": 10.0
    }
  }
}

使用 default_metric 值在 aggregate_metric_double 字段上的查询。

GET stats-index/_search
{
  "query": {
    "term": {
      "agg_metric": {
        "value": 702.30
      }
    }
  }
}

搜索返回下面的命中。 default_metric 字段(也就是 max)的值,匹配到查询值。

{
  ...
    "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "stats-index",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "agg_metric": {
            "min": -302.5,
            "max": 702.3,
            "sum": 200.0,
            "value_count": 25
          }
        }
      }
    ]
  }
}