MST
星途 面试题库

面试题:ElasticSearch计数聚合中如何对不同类型字段进行有效统计

在ElasticSearch的计数聚合场景下,假设存在一个索引,其中包含文本字段、数字字段和日期字段。请描述如何分别针对这些不同类型的字段,使用计数聚合来统计文档数量、唯一值数量等基础数据。并给出对应的聚合查询示例。
40.0万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

文本字段

  1. 统计文档数量:使用简单的terms聚合,它会统计每个文本值出现的文档数,相当于统计包含该文本字段值的文档数量。
{
    "aggs": {
        "text_field_count": {
            "terms": {
                "field": "text_field_name"
            }
        }
    }
}
  1. 统计唯一值数量:上述terms聚合的桶数量,就代表了唯一值的数量。如果想直接得到唯一值数量,可以使用cardinality聚合。
{
    "aggs": {
        "unique_text_field_count": {
            "cardinality": {
                "field": "text_field_name"
            }
        }
    }
}

数字字段

  1. 统计文档数量:可以使用terms聚合对数字字段进行分组统计,从而得到文档数量。
{
    "aggs": {
        "number_field_count": {
            "terms": {
                "field": "number_field_name"
            }
        }
    }
}
  1. 统计唯一值数量:同样使用cardinality聚合。
{
    "aggs": {
        "unique_number_field_count": {
            "cardinality": {
                "field": "number_field_name"
            }
        }
    }
}

日期字段

  1. 统计文档数量:使用date_histogram聚合按日期区间分组来统计文档数量。例如按天分组:
{
    "aggs": {
        "date_field_count": {
            "date_histogram": {
                "field": "date_field_name",
                "calendar_interval": "day"
            }
        }
    }
}
  1. 统计唯一值数量:日期字段如果是唯一标识(如事件发生时间且不重复),可以直接用cardinality聚合。
{
    "aggs": {
        "unique_date_field_count": {
            "cardinality": {
                "field": "date_field_name"
            }
        }
    }
}

在以上示例中,text_field_namenumber_field_namedate_field_name需替换为实际索引中的字段名称。