MST

星途 面试题库

面试题:ElasticSearch聚合查询在电商商品搜索中的应用场景及实现

假设你在开发一个电商搜索系统,需要对商品进行聚合查询,以实现按照商品类别统计商品数量、平均价格等功能。请描述在这种场景下,ElasticSearch聚合查询的使用思路,并给出相应的聚合查询DSL示例。
25.1万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

使用思路

  1. 确定聚合维度:在电商场景中,商品类别是关键的聚合维度。通过按商品类别进行聚合,可以统计每个类别下的商品数量、计算平均价格等。
  2. 选择聚合类型
    • 统计商品数量:使用 cardinalityterms 聚合,terms 聚合可以统计每个类别下商品数量,更为常用。
    • 计算平均价格:使用 avg 聚合,在按商品类别聚合的基础上,对价格字段进行平均计算。
  3. 构建查询:在 ElasticSearch DSL 中,通过 aggs 字段来定义聚合。

聚合查询DSL示例

{
    "size": 0,
    "aggs": {
        "by_category": {
            "terms": {
                "field": "category.keyword"
            },
            "aggs": {
                "total_count": {
                    "value_count": {
                        "field": "id"
                    }
                },
                "avg_price": {
                    "avg": {
                        "field": "price"
                    }
                }
            }
        }
    }
}

上述示例中:

  • size: 0 表示不返回文档结果,只关注聚合结果。
  • by_category 是自定义的聚合名称,通过 termscategory.keyword 字段进行聚合。
  • total_count 统计每个类别下的商品数量,通过 value_countid 字段计数。
  • avg_price 计算每个类别下商品的平均价格,通过 avgprice 字段求平均。