不确定是否可行,但是我遇到了当前问题:
在页面上但未选择任何构面的情况下,我在构面上进行了一些汇总的查询。
例如:在“女士鞋子”页面上,我运行一个查询,其中“ gender = ladies”和类别“ shoes”作为过滤器,这给了我所有想要的结果。另外,“品牌”的汇总也将我所有的品牌归还给我。但是,由于不符合“女士鞋”标准,因此其中也包含计数为0的品牌。但是由于没有选择任何构面,因此我可以将它们隐藏起来,这样用户就不会看到它们。
到目前为止,很好。
现在,当我查询“耐克女鞋”(brand = nike作为过滤器)时,我得到了相同的汇总列表,但现在除耐克外,所有品牌的计数都为0。现在,很难隐藏它们,因为我们希望提供对多个(可用)品牌进行过滤的可能性。
最好的方法是什么,并尽可能减少查询?
答案 0 :(得分:1)
在您的示例中谈论多选择构面时-Elasticsearch中有一个非常方便的功能-post_filter
post_filter应用于搜索匹配项的末尾 已经计算出聚合后的搜索请求。
您需要做的就是将您的Nike品牌过滤器移动到查询的post_filter
,如下所示:
{
"query": {
...
},
"aggs": {
...
},
"post_filter": {
"term": { "brand": "Nike" }
}
}
这将允许您计算所有品牌的汇总,并且仅在之后才能过滤出所选品牌。