面试题答案
一键面试1. 适用场景举例
- 电商产品分类与品牌统计:电商平台有大量商品,需要先按商品类别(如服装、电子产品等)聚合,再在每个类别下对品牌(如耐克、苹果等)聚合,以便了解每个类别下不同品牌的产品分布情况。
- 文档标签分类与子标签统计:在文档管理系统中,文档可能有一级标签(如技术、生活等),每个一级标签下又有二级子标签(如技术下的编程、数据库;生活下的美食、旅游等),通过嵌套聚合可以统计不同一级标签下二级子标签的文档数量。
2. ElasticSearch实现电商商品按类别聚合后再按品牌聚合的示例
假设商品索引为products
,包含category
(类别)和brand
(品牌)字段。
使用Elasticsearch的DSL(Domain Specific Language)进行查询,示例如下:
{
"size": 0,
"aggs": {
"categories": {
"terms": {
"field": "category"
},
"aggs": {
"brands": {
"terms": {
"field": "brand"
}
}
}
}
}
}
解释:
size: 0
表示不返回具体的文档,只关注聚合结果。aggs
是聚合部分。categories
是外层聚合,使用terms
聚合按category
字段进行分组。- 在
categories
聚合内部,又定义了brands
聚合,同样使用terms
聚合按brand
字段在每个类别分组内进行分组。