聚合是在查询匹配的文档中做统计的
不指定查询语句时,从所有文档中匹配。
下面两个语句等价:
GET /cars/transactions/_search
{
"size" : ,
"aggs" : {
"colors" : {
"terms" : {
"field" : "color"
}
}
}
}
GET /cars/transactions/_search
{
"size" : ,
"query" : {
"match_all" : {}
},
"aggs" : {
"colors" : {
"terms" : {
"field" : "color"
}
}
}
}
全局桶:global
一个包含所有数据的桶,可以在即想使用子集,又想使用全集时用到。
GET /cars/transactions/_search
{
"size" : ,
"query" : {
"match" : {
"make" : "ford"
}
},
"aggs" : {
"single_avg_price": {
"avg" : { "field" : "price" }
},
"all": {
"global" : {},
"aggs" : {
"avg_price": {
"avg" : { "field" : "price" }
} }
}
}
}
一个同时包括过滤和聚合的例子
GET /cars/transactions/_search
{
"size" : ,
"query" : {
"constant_score": {
"filter": {
"range": {
"price": {
"gte":
}
}
}
}
},
"aggs" : {
"single_avg_price": {
"avg" : { "field" : "price" }
}
}
}
过滤桶:filter
只有查询结果中符合条件的文档才会放入过滤桶,用于对聚合结果过滤
GET /cars/transactions/_search
{
"size" : ,
"query":{
"match": {
"make": "ford"
}
},
"aggs":{
"recent_sales": {
"filter": {
"range": {
"sold": {
"from": "now-1M"
}
}
},
"aggs": {
"average_price":{
"avg": {
"field": "price"
}
}
}
}
}
}
后过滤器:post_filter
只过滤搜索结果,不过滤聚合结果
说实话,例子我没看懂。感觉短期内用不上,先跳过了。