Eager global ordinals(急切全局序号)
eager_global_ordinals 映射参数控制何时为字段构建全局序号。启用时,全局序号会在索引刷新期间计算,而不是在查询执行期间“懒加载”。这可以提高依赖全局序号的操作的性能,例如对关键字字段进行排序和聚合。然而,它也可能增加索引刷新时间和内存使用量。
全局序号表示从词项值到整数标识符的映射,内部用于快速执行聚合和排序操作。通过“急切地”加载它们,系统以索引期间额外的前期处理为代价,减少了查询延迟。
默认情况下,eager_global_ordinals 是禁用的,这确保了集群针对索引速度进行了优化。
全局序号存储在字段数据缓存中,并消耗堆内存。具有高基数的字段可能会消耗大量堆内存。为了防止与内存相关的问题,仔细配置字段数据断路器设置非常重要。
何时使用全局序号
如果搜索包含以下任何内容,则会使用全局序号:
对
keyword、ip和flattened字段的桶聚合。这包括terms、composite、diversified_sampler和significant_terms聚合。对需要启用
fielddata的text字段的聚合。使用 join 字段的父/子查询,例如has_child查询或
parent聚合。
在字段上启用急切全局序号
以下请求创建一个名为 products 的索引,并启用了 eager_global_ordinals:
PUT /products
{
"mappings": {
"properties": {
"size": {
"type": "keyword",
"eager_global_ordinals": true
}
}
}
}
以下请求索引一个文档:
PUT /products/_doc/1
{
"size": "ABC123"
}
以下请求运行一个 terms 聚合:
POST /products/_search
{
"size": 0,
"aggs": {
"size_agg": {
"terms": {
"field": "size"
}
}
}
}