Link Search Menu Expand Document Documentation Menu

星形树字段类型

星形树索引预计算聚合,加速聚合查询的性能。如果星形树索引被配置为索引映射的一部分,则在实时摄取数据时,星形树索引会被创建和维护。

如果查询字段是星形树索引维度字段的一部分,并且聚合是针对星形树索引指标字段的,OpenSearch 将自动使用星形树索引来优化聚合。查询语法或请求参数不需要任何更改。

欲了解更多信息,请参阅星形树索引

先决条件

要使用星形树索引,请按照启用星形树索引中的说明进行操作。

示例

以下示例展示了如何使用星形树索引。

星形树索引映射

mappings 中的 composite 部分定义星形树索引映射。

以下示例 API 请求创建一个名为 request_aggs 的相应星形树索引。为了计算 request_sizelatency 字段的指标聚合,并在 portstatus 字段上进行查询,请配置以下映射:

PUT logs
{
  "settings": {
    "index.number_of_shards": 1,
    "index.number_of_replicas": 0,
    "index.composite_index": true,
    "index.append_only.enabled": true
  },
  "mappings": {
    "composite": {
      "request_aggs": {
        "type": "star_tree",
        "config": {
          "max_leaf_docs": 10000,
          "skip_star_node_creation_for_dimensions": [
            "port"
          ],
          "date_dimension" : {
            "name": "@timestamp",
            "calendar_intervals": [
              "month",
              "day"
            ]
          },
          "ordered_dimensions": [
            {
              "name": "status"
            },
            {
              "name": "port"
            },
            {
              "name": "method"
            }
          ],
          "metrics": [
            {
              "name": "request_size",
              "stats": [
                "sum",
                "value_count",
                "min",
                "max"
              ]
            },
            {
              "name": "latency",
              "stats": [
                "sum",
                "value_count",
                "min",
                "max"
              ]
            }
          ]
        }
      }
    },
    "properties": {
      "@timestamp": {
        "format": "strict_date_optional_time||epoch_second",
        "type": "date"
      },
      "status": {
        "type": "integer"
      },
      "port": {
        "type": "integer"
      },
      "request_size": {
        "type": "integer"
      },
      "method" : {
        "type": "keyword"
      },
      "latency": {
        "type": "scaled_float",
        "scaling_factor": 10
      }
    }
  }
}

星形树索引配置选项

您可以在 mappings 部分使用以下 config 选项来自定义您的星形树实现。这些选项无法在不重新索引的情况下进行修改。

参数 描述
ordered_dimensions 基于字段列表,这些字段的指标将在星形树索引中聚合。必填。
date_dimension 如果提供了日期维度,则 ordered_dimensions 将追加到其中,以此为基础在星形树索引中聚合指标。可选。
metrics 执行聚合所需的指标字段列表。必填。
max_leaf_docs 叶节点可以指向的最大星形树文档数量。达到最大文档数量后,将根据 ordered_dimension 中下一个字段(如果有)的唯一值创建子节点。默认值为 10000。较低的值将使用更多存储空间,但查询性能更快。相反,较高的值将使用较少存储空间,但查询性能较慢。欲了解更多信息,请参阅星形树索引结构
skip_star_node_creation_for_dimensions 一个维度列表,星形树索引将跳过其星节点的创建。当设置为 true 时,这将以牺牲查询性能为代价来减少存储大小。默认值为 false。有关星节点的更多信息,请参阅星形树索引结构

有序维度

ordered_dimensions 参数包含基于其在星形树索引中聚合指标的字段。只有当查询中的所有字段都是 ordered_dimensions 的一部分时,才会选择星形树索引进行查询。

使用 ordered_dimesions 参数时,请遵循以下最佳实践:

  • 维度的顺序很重要。您可以按从最高基数到最低基数的顺序定义维度,以实现高效存储和查询剪枝。
  • 避免使用高基数字段作为维度。高基数字段会对存储空间、索引吞吐量和查询性能产生不利影响。
  • 每个星形树索引支持最少 2 个,最多 10 个维度。

ordered_dimensions 参数支持以下字段类型:

  • 所有数值字段类型,不包括 unsigned_longscaled_float
  • keyword
  • object

对其他字段类型(如 ip)的支持将在未来版本中添加。有关更多信息,请参阅 GitHub issue #13875

ordered_dimensions 参数支持以下属性。

参数 必需/可选 描述
名称 必需 字段的名称。字段名称应作为索引 mappingproperties 部分的一部分存在。确保任何关联字段的 doc_values 设置为 enabled

日期维度

date_dimension 支持一个 Date 字段,并且总是放在有序维度之上的第一个维度,因为它们通常具有高基数。

date_dimension 最多支持以下三个日历间隔:

  • year(纪元年)
  • quarter(年份的季度)
  • month(年份的月份)
  • week(基于周的年份的周)
  • day(月份中的天)
  • hour(天中的小时)
  • half-hour(天中的半小时)
  • quater-hour(天中的一刻钟)
  • minute(小时中的分钟)
  • second(分钟中的秒)

date 字段中的任何值都会根据所提供的日历间隔相关的粒度进行四舍五入。例如:

  • 默认的 calendar_intervalsminutehalf-hour
  • 在查询期间,会自动选择最近的粒度间隔。例如,如果您已将 hourminute 配置为 calendar_intervals,并且您的查询是一个月度日期直方图,那么将自动选择 hour 间隔,以便查询以优化的方式计算结果。
  • 为了支持基于时区的查询,:30 等于 half-hour 间隔,:15 等于 quarter-hour 间隔。

指标

配置您需要执行聚合的任何指标字段。Metrics 是星形树索引配置中必需的一部分。

使用 metrics 时,请遵循以下最佳实践:

  • 目前,metrics 支持的字段是所有数值字段类型,但 unsigned_long 除外。有关更多信息,请参阅 GitHub issue #15231
  • 支持的指标聚合包括 MinMaxSumAvgValue_count
    • Avg 是基于 SumValue_count 的派生指标,在运行查询时不会被索引。其余基本指标会被索引。
  • 每个星形树索引最多支持 100 个基本指标。

如果为每个字段定义了 MinMaxSumValue_count 作为 metrics,则最多可以配置 25 个此类字段,如下例所示:

{
  "metrics": [
    {
      "name": "field1",
      "stats": [
        "sum",
        "value_count",
        "min",
        "max"
      ],
      ...,
      ...,
      "name": "field25",
      "stats": [
        "sum",
        "value_count",
        "min",
        "max"
      ]
    }
  ]
}

属性

metrics 参数支持以下属性。

参数 必需/可选 描述
名称 必需 字段的名称。字段名称应作为索引 mappingproperties 部分的一部分存在。确保任何关联字段的 doc_values 设置为 enabled
stats 可选 为每个字段计算的指标聚合列表。您可以选择 MinMaxSumAvgValue Count
默认值为 SumValue_count
如果 SumValue_Count 作为指标 stats 的一部分存在,则 Avg 作为派生指标统计信息将自动在查询中受支持。

支持的查询和聚合

有关支持的查询和聚合的更多信息,请参阅星形树索引支持的查询和聚合

后续步骤

剩余 350 字符

有问题?

想贡献吗?