我认为这是post_filter的典型用例。正如文档所说:
在已经计算出聚合之后,post_filter会在搜索请求的最后应用于搜索匹配
您的查询将如下所示:
{ "post_filter":{ "terms":{ "family_name":"Brown" //filter_1 } }, "aggs":{ "young_age":{ "filter":{ "range":{ "lt":40, "gt":18 } //filter_2 }, "aggs":{ "age":{ "terms":{ "field":"age" } } } } }}在这种情况下,搜索结果是索引中的所有文档。然后计算聚合(在filter_1之前)。然后
post_filter执行filter_1。
编辑:正如您在表彰中所说,您有很多聚合,而且只有一个不受此影响,
filter_1我使用全局聚合修复了查询
{ "query": { "filtered": { "filter": { "term": { "family_name": "Brown" } } } }, "aggs": { "young_age": { "global": {}, "aggs": { "filter2": { "filter": { "range": { "lt": 40, "gt": 18 } }, "aggs": { "age": { "terms": { "field": "age" } } } } } } }}


