聚合指标字段类型编辑

存储用于 指标聚合 的预聚合数值。 aggregate_metric_double 字段是一个对象,包含以下一个或多个指标子字段:minmaxsumvalue_count

当您在 aggregate_metric_double 字段上运行某些指标聚合时,聚合将使用相关子字段的值。例如,在 aggregate_metric_double 字段上进行 min 聚合将返回所有 min 子字段的最小值。

aggregate_metric_double 字段为每个指标子字段存储单个数值 文档值。不支持数组值。 minmaxsum 值是 double 数字。 value_count 是一个正的 long 数字。

response = client.indices.create(
  index: 'my-index',
  body: {
    mappings: {
      properties: {
        "my-agg-metric-field": {
          type: 'aggregate_metric_double',
          metrics: [
            'min',
            'max',
            'sum',
            'value_count'
          ],
          default_metric: 'max'
        }
      }
    }
  }
)
puts response
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
(必填,字符串数组)要存储的指标子字段数组。每个值对应一个 指标聚合。有效值为 minmaxsumvalue_count。您必须至少指定一个值。
default_metric
(必填,字符串)用于不使用子字段的查询、脚本和聚合的默认指标子字段。必须是 metrics 数组中的值。
time_series_metric

(可选,字符串)将字段标记为 时间序列指标。该值是指标类型。您无法更新现有字段的此参数。

aggregate_metric_double 字段的有效 time_series_metric
gauge
表示可以任意增加或减少的单个数字的指标。例如,温度或可用磁盘空间。
null(默认)
不是时间序列指标。

用途编辑

我们设计 aggregate_metric_double 字段是为了与以下聚合一起使用

  • min 聚合返回所有 min 子字段的最小值。
  • max 聚合返回所有 max 子字段的最大值。
  • sum 聚合返回所有 sum 子字段的值的总和。
  • value_count 聚合返回所有 value_count 子字段的值的总和。
  • avg 聚合。没有 avg 子字段;avg 聚合的结果是使用 sumvalue_count 指标计算的。要运行 avg 聚合,该字段必须同时包含 sumvalue_count 指标子字段。

aggregate_metric_double 字段上运行任何其他聚合将失败,并显示“不支持的聚合”错误。

最后,aggregate_metric_double 字段支持以下查询,通过将其行为委托给其 default_metric 子字段,它在这些查询中表现为 double

示例编辑

以下 创建索引 API 请求创建一个包含名为 agg_metricaggregate_metric_double 字段的索引。该请求将 max 设置为该字段的 default_metric

response = client.indices.create(
  index: 'stats-index',
  body: {
    mappings: {
      properties: {
        agg_metric: {
          type: 'aggregate_metric_double',
          metrics: [
            'min',
            'max',
            'sum',
            'value_count'
          ],
          default_metric: 'max'
        }
      }
    }
  }
)
puts response
PUT stats-index
{
  "mappings": {
    "properties": {
      "agg_metric": {
        "type": "aggregate_metric_double",
        "metrics": [ "min", "max", "sum", "value_count" ],
        "default_metric": "max"
      }
    }
  }
}

以下 索引 API 请求添加了在 agg_metric 字段中包含预聚合数据的文档。

response = client.index(
  index: 'stats-index',
  id: 1,
  body: {
    agg_metric: {
      min: -302.5,
      max: 702.3,
      sum: 200,
      value_count: 25
    }
  }
)
puts response

response = client.index(
  index: 'stats-index',
  id: 2,
  body: {
    agg_metric: {
      min: -93,
      max: 1702.3,
      sum: 300,
      value_count: 25
    }
  }
)
puts response
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 字段上运行 minmaxsumvalue_countavg 聚合。

response = client.search(
  index: 'stats-index',
  size: 0,
  body: {
    aggregations: {
      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'
        }
      }
    }
  }
)
puts response
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
    }
  }
}

aggregate_metric_double 字段的查询使用 default_metric 值。

response = client.search(
  index: 'stats-index',
  body: {
    query: {
      term: {
        agg_metric: {
          value: 702.3
        }
      }
    }
  }
)
puts response
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
          }
        }
      }
    ]
  }
}

合成 _source编辑

合成 _source 通常仅适用于 TSDB 索引(index.mode 设置为 time_series 的索引)。对于其他索引,合成 _source 处于技术预览阶段。技术预览中的功能可能会在未来版本中更改或删除。Elastic 将努力修复任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。

aggregate_metric-double 字段在其默认配置中支持 合成 _source。合成 _source 不能与 ignore_malformed 一起使用。

例如

response = client.indices.create(
  index: 'idx',
  body: {
    mappings: {
      _source: {
        mode: 'synthetic'
      },
      properties: {
        agg_metric: {
          type: 'aggregate_metric_double',
          metrics: [
            'min',
            'max',
            'sum',
            'value_count'
          ],
          default_metric: 'max'
        }
      }
    }
  }
)
puts response

response = client.index(
  index: 'idx',
  id: 1,
  body: {
    agg_metric: {
      min: -302.5,
      max: 702.3,
      sum: 200,
      value_count: 25
    }
  }
)
puts response
PUT idx
{
  "mappings": {
    "_source": { "mode": "synthetic" },
    "properties": {
      "agg_metric": {
        "type": "aggregate_metric_double",
        "metrics": [ "min", "max", "sum", "value_count" ],
        "default_metric": "max"
      }
    }
  }
}

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

将变为

{
  "agg_metric": {
    "min": -302.50,
    "max": 702.30,
    "sum": 200.0,
    "value_count": 25
  }
}