Link Search Menu Expand Document Documentation Menu

基数聚合

cardinality 聚合是一种单值指标聚合,用于计算字段的唯一或不同值的数量。

基数计数是近似值。有关更多信息,请参阅控制精度

参数

cardinality 聚合接受以下参数。

参数 必需/可选 数据类型 描述
field 必需 字符串 用于估计基数的字段。
precision_threshold 可选 数值 在此阈值以下,计数预计接近精确。有关更多信息,请参阅控制精度
execution_hint 可选 字符串 如何运行聚合。有效值为 ordinalsdirect
missing 可选 field 的类型相同 用于存储字段缺失实例的桶。如果未提供,则忽略缺失值。

示例

以下示例请求查找 OpenSearch Dashboards 示例电子商务数据中唯一产品 ID 的数量

GET opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "unique_products": {
      "cardinality": {
        "field": "products.product_id"
      }
    }
  }
}

示例响应

如以下示例响应所示,聚合在 unique_products 变量中返回基数计数

{
  "took": 176,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 4675,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "unique_products": {
      "value": 7033
    }
  }
}

控制精度

精确的基数计算需要将所有值加载到哈希集中并返回其大小。这种方法扩展性不好;它可能需要大量内存并导致高延迟。

您可以使用 precision_threshold 设置来控制内存和精度之间的权衡。此参数设置了计数预计接近精确的阈值。高于此值的计数可能不太精确。

precision_threshold 的默认值为 3,000。最大支持值为 40,000。

基数聚合使用 HyperLogLog++ 算法。基数计数在精度阈值以下通常非常精确,在大多数其他情况下,即使阈值低至 100,也与真实计数相差不超过 6%。

预计算哈希值

对于高基数字符串字段,存储索引字段的哈希值并计算哈希的基数可以节省计算和内存资源。请谨慎使用此方法;它仅对具有长字符串和/或高基数的集合更有效。数值字段和内存消耗较少的字符串集最好直接处理。

示例:控制精度

将精度阈值设置为 10000 个唯一值

GET opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "unique_products": {
      "cardinality": {
        "field": "products.product_id",
        "precision_threshold": 10000
      }
    }
  }
}

响应与默认阈值的结果相似,但返回的值略有不同。调整 precision_threshold 参数以查看其如何影响基数估计。

配置聚合执行

您可以使用 execution_hint 设置来控制聚合的运行方式。此设置支持两个选项

  • direct – 直接使用字段值。
  • ordinals – 使用字段的序号。

如果您未指定 execution_hint,OpenSearch 会自动为该字段选择最佳选项。

在非序号字段上设置 ordinals 无效。同样,direct 对序号字段也无效。

这是一项专家级设置。序号使用字节数组,其数组大小取决于字段的基数。高基数字段会消耗大量堆内存,增加内存不足错误的风险。

示例:控制执行

以下请求使用序号运行基数聚合

GET opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "unique_products": {
      "cardinality": {
        "field": "products.product_id",
        "execution_hint": "ordinals"
      }
    }
  }
}

缺失值

您可以为聚合字段的缺失实例指定一个值。有关更多信息,请参阅缺失聚合

在基数聚合中替换缺失值会将替换值添加到唯一值列表中,从而将实际基数增加一。

剩余 350 字符

有问题?

想贡献?