使用查询过滤器确定聚合范围
Scoping aggregations with query filters
我在 elasticsearch 中使用热门聚合。但是,当我向查询添加过滤器时,它 returns 0 命中(预期行为)并且聚合不匹配过滤器和 return 非零文档。我的印象是聚合在与查询相同的范围内工作?似乎不是那样工作的。有什么想法吗?
您可能正在使用顶级 filter
而不是筛选查询。顶级过滤器被解释为 post filter 并在查询执行后执行,影响命中但不影响构面。
如果您只是将 post 过滤器转换为 filtered query,则只会根据过滤器的结果正确计算聚合。
{
"query":{
"filtered":{
"filter": // your filter as before
}
},
"aggs": // now they will be correctly calculated
}
我在 elasticsearch 中使用热门聚合。但是,当我向查询添加过滤器时,它 returns 0 命中(预期行为)并且聚合不匹配过滤器和 return 非零文档。我的印象是聚合在与查询相同的范围内工作?似乎不是那样工作的。有什么想法吗?
您可能正在使用顶级 filter
而不是筛选查询。顶级过滤器被解释为 post filter 并在查询执行后执行,影响命中但不影响构面。
如果您只是将 post 过滤器转换为 filtered query,则只会根据过滤器的结果正确计算聚合。
{
"query":{
"filtered":{
"filter": // your filter as before
}
},
"aggs": // now they will be correctly calculated
}