首页 > 解决方案 > 使用选定方面获取聚合结果

问题描述

不确定这是否可能,但我遇到了当前问题:

在页面上时,没有选择任何方面,我在我的方面运行带有一些聚合的查询。

例如:在“女鞋”页面上,我使用“gender=ladies”和类别“shoes”作为过滤器运行查询,这给了我所有想要的结果。还有一个关于“品牌”的聚合,它返回了我所有的品牌。但是,这也包含计数为 0 的品牌,因为它们不符合“女鞋”标准。但由于没有选择任何方面,我可以简单地隐藏它们,这样用户就不会看到它们。

到现在为止还挺好。

现在,当我查询“来自耐克的女士鞋”(brand=nike 作为过滤器)时,我得到了相同的聚合列表,但现在所有品牌的计数都为 0,除了耐克。现在,很难隐藏它们,因为我们希望提供过滤多个(可用)品牌的可能性。

最好的方法应该是什么,尽可能少的查询?

标签: elasticsearch

解决方案


当您在示例中谈论多选分面时 - Elasticsearch 中有一个非常方便的功能 - post_filter

在已经计算聚合之后,post_filter 将应用于搜索请求最后的搜索命中。

您需要做的就是将您的 Nike 品牌过滤器移动到post_filter查询中,如下所示:

{
  "query": {
      ...
  },
  "aggs": {
      ...
  },
  "post_filter": { 
    "term": { "brand": "Nike" }
  }
}

这将允许您计算所有品牌的聚合,并且只有它过滤掉选定的品牌之后。


推荐阅读