Chapter 29. Scoping Aggregations
With all of the aggregation examples given so far, you may have noticed that we
omitted a query from the search request. The entire request was
simply an aggregation.
Aggregations can be run at the same time as search requests, but you need to understand a new concept: scope. By default, aggregations operate in the same scope as the query. Put another way, aggregations are calculated on the set of documents that match your query.
Let’s look at one of our first aggregation examples:
GET/cars/transactions/_search?search_type=count{"aggs":{"colors":{"terms":{"field":"color"}}}}
You can see that the aggregation is in isolation. In reality, Elasticsearch assumes “no query specified” is equivalent to “query all documents.” The preceding query is internally translated as follows:
GET/cars/transactions/_search?search_type=count{"query":{"match_all":{}},"aggs":{"colors":{"terms":{"field":"color"}}}}
The aggregation always operates in the scope of the query, so an isolated
aggregation really operates in the scope of a match_all query—that is to say,
all documents.
Once armed with the knowledge of scoping, we can start to customize aggregations even further. All of our previous examples calculated statistics about all of the data: top-selling cars, average price of all cars, most sales per month, and so forth.
With scope, we can ask questions such as “How many colors are Ford cars are available in?” We do this ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access