Grouping and Aggregation of Low-cardinality Fields

Low-cardinality fields have high data clustering performance when being sorted, which facilitates vectorized optimization. Assume that the following query statement exists:

POST testindex/_search
{
  "size": 0,
  "aggs": {
    "groupby_region": {
      "terms": {
        "field": "region"
      },
      "aggs": {
        "groupby_host": {
          "terms": {
            "field": "host"
          },
          "aggs": {
            "avg_cpu_usage": {
              "avg": {
                "field": "cpu_usage"
              }
            }
          }
        }
      }
    }
  }
}

Assume that the region and host are low-cardinality fields. To use the enhanced aggregation, set the parameters as follows:

Note

The clustering key must be a prefix subset of the sorting key.

// Configure an index
"settings" : {
    "index" : {
        "search" : {
            "turbo" : {
                "enabled" : "true" // Enable optimization
            }
        },
        "sort" : { // Specify a sorting key
            "field" : [
                "region",
                "host",
                "other"
            ]
        },
        "cluster" : {
            "field" : [ // Specify a clustering key
                "region",
                "host"
            ]
        }
    }
}