我确信这已经在这里得到了多次回答,但让我们以你的具体例子为例。
创建索引
PUT lalit
{
"mappings": {
"properties": {
"model": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"color": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
摄取一些文档
POST lalit/_doc
{"color":"red","model":"bmw"}
POST lalit/_doc
{"color":"blue","model":"bmw"}
POST lalit/_doc
{"color":"red","model":"vw"}
POST lalit/_doc
{"color":"green","model":"vw"}
POST lalit/_doc
{"color":"blue","model":"ford"}
应用terms agg + filter terms agg 的组合
GET lalit/_search
{
"size": 0,
"aggs": {
"all_models": {
"terms": {
"field": "model.keyword"
}
},
"all_colors": {
"terms": {
"field": "color.keyword"
}
},
"model_filtered_colors": {
"filter": {
"term": {
"model.keyword": "vw"
}
},
"aggs": {
"actual_aggs": {
"terms": {
"field": "color.keyword"
}
}
}
}
}
}
产量
"aggregations" : {
"model_filtered_colors" : {
"doc_count" : 2,
"actual_aggs" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "green",
"doc_count" : 1
},
{
"key" : "red",
"doc_count" : 1
}
]
}
},
"all_models" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "bmw",
"doc_count" : 2
},
{
"key" : "vw",
"doc_count" : 2
},
{
"key" : "ford",
"doc_count" : 1
}
]
},
"all_colors" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "blue",
"doc_count" : 2
},
{
"key" : "red",
"doc_count" : 2
},
{
"key" : "green",
"doc_count" : 1
}
]
}
}
model_filtered_colors 按颜色为您提供所有 vws,而其他 2 个聚合为您提供全面的总数(没有 vw 过滤器)。