面试题答案
一键面试使用思路
- 确定聚合维度:在电商场景中,商品类别是关键的聚合维度。通过按商品类别进行聚合,可以统计每个类别下的商品数量、计算平均价格等。
- 选择聚合类型:
- 统计商品数量:使用
cardinality
或terms
聚合,terms
聚合可以统计每个类别下商品数量,更为常用。 - 计算平均价格:使用
avg
聚合,在按商品类别聚合的基础上,对价格字段进行平均计算。
- 统计商品数量:使用
- 构建查询:在 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
是自定义的聚合名称,通过terms
按category.keyword
字段进行聚合。total_count
统计每个类别下的商品数量,通过value_count
对id
字段计数。avg_price
计算每个类别下商品的平均价格,通过avg
对price
字段求平均。