navigation_title: "Filter" mapped_pages:
A single bucket aggregation that narrows the set of documents to those that match a query.
Example:
$$$filter-aggregation-example$$$
POST /sales/_search?size=0&filter_path=aggregations
{
"aggs": {
"avg_price": { "avg": { "field": "price" } },
"t_shirts": {
"filter": { "term": { "type": "t-shirt" } },
"aggs": {
"avg_price": { "avg": { "field": "price" } }
}
}
}
}
The previous example calculates the average price of all sales as well as the average price of all T-shirt sales.
Response:
{
"aggregations": {
"avg_price": { "value": 140.71428571428572 },
"t_shirts": {
"doc_count": 3,
"avg_price": { "value": 128.33333333333334 }
}
}
}
query
to limit all aggregations [use-top-level-query-to-limit-all-aggs]To limit the documents on which all aggregations in a search run, use a top-level query
. This is faster than a single filter
aggregation with sub-aggregations.
For example, use this:
$$$filter-aggregation-top-good$$$
POST /sales/_search?size=0&filter_path=aggregations
{
"query": { "term": { "type": "t-shirt" } },
"aggs": {
"avg_price": { "avg": { "field": "price" } }
}
}
Instead of this:
$$$filter-aggregation-top-bad$$$
POST /sales/_search?size=0&filter_path=aggregations
{
"aggs": {
"t_shirts": {
"filter": { "term": { "type": "t-shirt" } },
"aggs": {
"avg_price": { "avg": { "field": "price" } }
}
}
}
}
filters
aggregation for multiple filters [use-filters-agg-for-multiple-filters]To group documents using multiple filters, use the filters
aggregation. This is faster than multiple filter
aggregations.
For example, use this:
$$$filter-aggregation-many-good$$$
POST /sales/_search?size=0&filter_path=aggregations
{
"aggs": {
"f": {
"filters": {
"filters": {
"hats": { "term": { "type": "hat" } },
"t_shirts": { "term": { "type": "t-shirt" } }
}
},
"aggs": {
"avg_price": { "avg": { "field": "price" } }
}
}
}
}
Instead of this:
$$$filter-aggregation-many-bad$$$
POST /sales/_search?size=0&filter_path=aggregations
{
"aggs": {
"hats": {
"filter": { "term": { "type": "hat" } },
"aggs": {
"avg_price": { "avg": { "field": "price" } }
}
},
"t_shirts": {
"filter": { "term": { "type": "t-shirt" } },
"aggs": {
"avg_price": { "avg": { "field": "price" } }
}
}
}
}