为了限制所有聚合运行的文档范围,可以使用顶级 query 。这比使用单个 filter 聚合与子聚合更快。
POST /sales/_search?size=0&filter_path=aggregations
{
"query": { "term": { "type": "t-shirt" } },
"aggs": {
"avg_price": { "avg": { "field": "price" } }
}
}
而不是使用以下方式:
POST /sales/_search?size=0&filter_path=aggregations
{
"aggs": {
"t_shirts": {
"filter": { "term": { "type": "t-shirt" } },
"aggs": {
"avg_price": { "avg": { "field": "price" } }
}
}
}
}
这句话的意思是:在Elasticsearch中,如果你希望在执行聚合操作之前先对数据进行筛选,以缩小聚合操作的范围,那么使用顶级的`query`来筛选数据通常比使用`filter`聚合来筛选数据更高效。
关键点解释: