- 查询示例:
{
"query": {
"bool": {
"filter": [
{
"term": {
"category": "electronics"
}
}
]
}
},
"aggs": {
"by_category": {
"terms": {
"field": "category"
}
},
"by_date": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
}
}
},
"post_filter": {
"term": {
"brand": "Apple"
}
}
}
- 步骤解释:
query.bool.filter
部分:
- 这里的
filter
用于在执行聚合之前对文档进行初步过滤。在示例中,通过term
查询筛选出category
为electronics
的文档。这一步会影响聚合操作,因为聚合是基于经过此过滤后的文档集进行的。
aggs
部分:
by_category
聚合:使用terms
聚合按category
字段对文档进行分组,统计每个类别的文档数量等聚合信息。由于前面filter
已经筛选出category
为electronics
的文档,所以这里聚合结果会基于这部分文档。
by_date
聚合:使用date_histogram
聚合按date
字段,以每月为间隔对文档进行聚合,同样基于经过前面filter
筛选后的文档。
post_filter
部分:
post_filter
中的term
查询筛选出brand
为Apple
的文档。这一步骤不会影响前面的聚合操作,聚合结果仍然是基于query.bool.filter
过滤后的文档集。而最终返回给用户的文档集是经过post_filter
再次过滤后的结果,确保最终返回的文档符合brand
为Apple
的要求,同时聚合结果不受此post_filter
条件影响。