聚合可以与搜索请求同时执行,但是我们需要理解一个新概念:范围 。 默认情况下,聚合与查询是对同一范围进行操作的,也就是说,聚合是基于我们查询匹配的文档集合进行计算的。
全局桶
通常我们希望聚合是在查询范围内的,但有时我们也想要搜索它的子集,而聚合的对象却是所有数据。
例如,比方说我们想知道福特汽车与所有汽车平均售价的比较。我们可以用普通的聚合(查询范围内的)得到第一个信息,然后用全局桶获得第二个信息。
全局 桶包含 所有 的文档,它无视查询的范围。因为它还是一个桶,我们可以像平常一样将聚合嵌套在内:
GET /cars/transactions/_search{"size" : 0,"query" : {"match" : {"make" : "ford"}},"aggs" : {"single_avg_price": {"avg" : { "field" : "price" }},"all": {"global" : {},"aggs" : {"avg_price": {"avg" : { "field" : "price" }}}}}}
