如果说搜索结果列表是“找到哪些店”,那么 aggregations 更像:
在你搜索的同时,把整座城市的统计面板也亮出来。
常见的业务体验是:
- 搜索 “headphones”
- 左边同时显示“品牌分布”
- 再显示“价格区间”
- 再显示“平均价格”
- 再显示“最近上新趋势”
这就是聚合的价值。
最基础的三个心智:
- bucket aggregation:分桶,像按品牌、分类、日期区间分组
- metric aggregation:算指标,像平均价、最大值、总和
- pipeline aggregation:基于已有聚合结果再计算
最常见的基础写法:
GET /city_products/_search
{
"size": 0,
"query": {
"term": {
"category": "audio"
}
},
"aggs": {
"by_brand": {
"terms": {
"field": "brand"
}
},
"avg_price": {
"avg": {
"field": "price"
}
}
}
}这里的思路是:
先限定一个搜索范围
│
├── 结果列表可以不要(size: 0)
└── 只看统计面板
├── 每个品牌有多少文档
└── 这些文档平均价格是多少这正是商品搜索、日志分析、内容检索里非常常见的能力。
要特别记住:
聚合不是全文相关性排序的副产品,它是 Elasticsearch 作为“搜索 + 分析中枢”的另一半主战场。