MST
星途 面试题库

面试题:ElasticSearch复杂数据分布分析下的多层嵌套聚合应用

假设有一个电商订单索引,每个订单文档包含订单信息以及订单中的商品列表(嵌套文档),商品有'category'(类别)和'price'(价格)字段。要求分析每个订单类别下不同价格区间的商品数量分布,并且需要按照商品数量降序排列。请写出完整的ElasticSearch聚合查询语句,并解释每个部分的作用。
25.9万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试
{
    "aggs": {
        "order_categories": {
            "nested": {
                "path": "商品列表"
            },
            "aggs": {
                "categories": {
                    "terms": {
                        "field": "商品列表.category"
                    },
                    "aggs": {
                        "price_ranges": {
                            "range": {
                                "field": "商品列表.price",
                                "ranges": [
                                    { "to": 100 },
                                    { "from": 100, "to": 200 },
                                    { "from": 200 }
                                ]
                            }
                        },
                        "sort_by_count": {
                            "bucket_sort": {
                                "sort": [
                                    {
                                        "price_ranges._count": {
                                            "order": "desc"
                                        }
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
}
  • nested:因为商品列表是嵌套文档,使用nested聚合来处理嵌套结构数据。path指定嵌套文档路径为商品列表
  • terms:在categories聚合中,按商品列表.category字段进行分组,得到不同的订单类别。
  • range:在price_ranges聚合中,按商品列表.price字段定义价格区间,这里定义了三个价格区间:小于100,100到200(包含100不包含200),大于等于200。
  • bucket_sort:在sort_by_count聚合中,按price_ranges聚合中的商品数量(_count)进行降序排列。