Link Search Menu Expand Document Documentation Menu

百分位桶聚合

percentiles_bucket 聚合是一个同级聚合,用于计算分桶指标的百分位位置。

percentiles_bucket 聚合精确计算百分位,不进行近似或插值。每个百分位都作为小于或等于目标百分位的最接近值返回。

percentiles_bucket 聚合要求将整个值列表临时保留在内存中,即使对于大型数据集也是如此。相比之下, percentiles 度量聚合使用的内存较少,但会近似百分比。

指定的指标必须是数值类型,并且同级聚合必须是多桶聚合。

参数

avg_bucket 聚合接受以下参数。

参数 必需/可选 数据类型 描述
buckets_path 必需 字符串 要聚合的聚合桶的路径。请参阅桶路径
gap_policy 可选 字符串 应用于缺失数据的策略。有效值为 skipinsert_zeros。默认为 skip。请参阅数据间隙
format 可选 字符串 一个 DecimalFormat 格式化字符串。将格式化输出返回到聚合的 value_as_string 属性中。
percents 可选 列表 一个包含任意数量的要包含在输出中的数值百分比值的列表。有效值介于 0.0 和 100.0 之间(含)。默认为 [1.0, 5.0, 25.0, 50.0, 75.0, 95.0, 99.0]
keyed 可选 布尔型 是否将输出格式化为字典而不是键值对对象数组。默认为 true (将输出格式化为键值对)。

示例

以下示例使用 OpenSearch Dashboards 电子商务示例数据创建一个以一周为间隔的日期直方图。sum 子聚合计算每周的 taxful_total_price 总和。最后,percentiles_bucket 聚合根据这些总和计算每周的百分位值

POST /opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "weekly_sales": {
      "date_histogram": {
        "field": "order_date",
        "calendar_interval": "week"
      },
      "aggs": {
        "total_price": {
          "sum": {
            "field": "taxful_total_price"
          }
        }
      }
    },
    "percentiles_monthly_sales": {
      "percentiles_bucket": {
        "buckets_path": "weekly_sales>total_price"
      }
    }
  }
}

示例响应

聚合返回每周价格总和的默认百分位值

响应
{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 4675,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "weekly_sales": {
      "buckets": [
        {
          "key_as_string": "2025-03-24T00:00:00.000Z",
          "key": 1742774400000,
          "doc_count": 582,
          "total_price": {
            "value": 41455.5390625
          }
        },
        {
          "key_as_string": "2025-03-31T00:00:00.000Z",
          "key": 1743379200000,
          "doc_count": 1048,
          "total_price": {
            "value": 79448.60546875
          }
        },
        {
          "key_as_string": "2025-04-07T00:00:00.000Z",
          "key": 1743984000000,
          "doc_count": 1048,
          "total_price": {
            "value": 78208.4296875
          }
        },
        {
          "key_as_string": "2025-04-14T00:00:00.000Z",
          "key": 1744588800000,
          "doc_count": 1073,
          "total_price": {
            "value": 81277.296875
          }
        },
        {
          "key_as_string": "2025-04-21T00:00:00.000Z",
          "key": 1745193600000,
          "doc_count": 924,
          "total_price": {
            "value": 70494.2578125
          }
        }
      ]
    },
    "percentiles_monthly_sales": {
      "values": {
        "1.0": 41455.5390625,
        "5.0": 41455.5390625,
        "25.0": 70494.2578125,
        "50.0": 78208.4296875,
        "75.0": 79448.60546875,
        "95.0": 81277.296875,
        "99.0": 81277.296875
      }
    }
  }
}

示例:选项

下一个示例使用与前一个示例相同的数据计算百分位,但存在以下差异

  • percents 参数指定只计算第 25、50 和 75 百分位。
  • 使用 format 参数追加字符串格式的输出。
  • 通过将 keyed 参数设置为 false,结果将显示为键值对对象(并附带字符串值)。

示例如下

POST /opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "weekly_sales": {
      "date_histogram": {
        "field": "order_date",
        "calendar_interval": "week"
      },
      "aggs": {
        "total_price": {
          "sum": {
            "field": "taxful_total_price"
          }
        }
      }
    },
    "percentiles_monthly_sales": {
      "percentiles_bucket": {
        "buckets_path": "weekly_sales>total_price",
        "percents": [25.0, 50.0, 75.0],
        "format": "$#,###.00",
        "keyed": false
      }
    }
  }
}

示例响应:选项

这些选项修改了聚合的输出

响应
{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 4675,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "weekly_sales": {
      "buckets": [
        {
          "key_as_string": "2025-03-24T00:00:00.000Z",
          "key": 1742774400000,
          "doc_count": 582,
          "total_price": {
            "value": 41455.5390625
          }
        },
        {
          "key_as_string": "2025-03-31T00:00:00.000Z",
          "key": 1743379200000,
          "doc_count": 1048,
          "total_price": {
            "value": 79448.60546875
          }
        },
        {
          "key_as_string": "2025-04-07T00:00:00.000Z",
          "key": 1743984000000,
          "doc_count": 1048,
          "total_price": {
            "value": 78208.4296875
          }
        },
        {
          "key_as_string": "2025-04-14T00:00:00.000Z",
          "key": 1744588800000,
          "doc_count": 1073,
          "total_price": {
            "value": 81277.296875
          }
        },
        {
          "key_as_string": "2025-04-21T00:00:00.000Z",
          "key": 1745193600000,
          "doc_count": 924,
          "total_price": {
            "value": 70494.2578125
          }
        }
      ]
    },
    "percentiles_monthly_sales": {
      "values": [
        {
          "key": 25,
          "value": 70494.2578125,
          "25.0_as_string": "$70,494.26"
        },
        {
          "key": 50,
          "value": 78208.4296875,
          "50.0_as_string": "$78,208.43"
        },
        {
          "key": 75,
          "value": 79448.60546875,
          "75.0_as_string": "$79,448.61"
        }
      ]
    }
  }
}
剩余 350 字符

有问题?

想做贡献?