面试题答案
一键面试- 聚合类型:
- 范围聚合(Range Aggregation):用于将数据按照指定的价格范围进行分组。
- 桶聚合(Bucket Aggregation):范围聚合属于桶聚合的一种,它会创建不同的桶(每个桶代表一个价格区间),将符合该区间条件的文档放入对应的桶中。
- 指标聚合(Metric Aggregation):这里使用
cardinality
指标聚合来计算每个价格区间(桶)内商品的数量。还会使用bucket_script
脚本聚合来计算每个桶内商品数量占总商品数量的百分比。
- 相关参数:
- 范围聚合参数:
ranges
:定义价格范围的数组。例如:
- 范围聚合参数:
{
"ranges": [
{
"from": 0,
"to": 100
},
{
"from": 100,
"to": 200
},
{
"from": 200,
"to": null
}
]
}
这里定义了三个价格区间:0 - 100,100 - 200,200及以上。
- 指标聚合参数 - cardinality:
field
:指定要计算数量的字段,这里是商品文档中的价格字段,例如price
。
- 脚本聚合参数 - bucket_script:
buckets_path
:指定要引用的桶内指标路径,例如count
(假设cardinality
计算出的数量指标名为count
)。script
:计算百分比的脚本,例如params.count / params._count * 100
。其中params._count
是所有文档的总数,params.count
是当前桶内文档数。
- 示例查询:
{
"aggs": {
"price_ranges": {
"range": {
"field": "price",
"ranges": [
{
"from": 0,
"to": 100
},
{
"from": 100,
"to": 200
},
{
"from": 200,
"to": null
}
]
},
"aggs": {
"count": {
"cardinality": {
"field": "price"
}
},
"percentage": {
"bucket_script": {
"buckets_path": {
"count": "count"
},
"script": "params.count / params._count * 100"
}
}
}
}
}
}
这个查询会对商品数据按价格范围进行聚合,计算每个范围的商品数量及占总商品数量的百分比。