使用查询过滤器确定聚合范围

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
}