elasticsearch - 使用选定方面获取聚合结果
问题描述
不确定这是否可能,但我遇到了当前问题:
在页面上时,没有选择任何方面,我在我的方面运行带有一些聚合的查询。
例如:在“女鞋”页面上,我使用“gender=ladies”和类别“shoes”作为过滤器运行查询,这给了我所有想要的结果。还有一个关于“品牌”的聚合,它返回了我所有的品牌。但是,这也包含计数为 0 的品牌,因为它们不符合“女鞋”标准。但由于没有选择任何方面,我可以简单地隐藏它们,这样用户就不会看到它们。
到现在为止还挺好。
现在,当我查询“来自耐克的女士鞋”(brand=nike 作为过滤器)时,我得到了相同的聚合列表,但现在所有品牌的计数都为 0,除了耐克。现在,很难隐藏它们,因为我们希望提供过滤多个(可用)品牌的可能性。
最好的方法应该是什么,尽可能少的查询?
解决方案
当您在示例中谈论多选分面时 - Elasticsearch 中有一个非常方便的功能 - post_filter
在已经计算聚合之后,post_filter 将应用于搜索请求最后的搜索命中。
您需要做的就是将您的 Nike 品牌过滤器移动到post_filter
查询中,如下所示:
{
"query": {
...
},
"aggs": {
...
},
"post_filter": {
"term": { "brand": "Nike" }
}
}
这将允许您计算所有品牌的聚合,并且只有在它过滤掉选定的品牌之后。
推荐阅读
- java - 从 JBoss 5 到 Wildfly 21 的 JBoss JNDI 命名绑定
- flutter - 在我的颤振应用程序中显示 pptx、excel 文件
- python - Matplotlib 根据一个值用不同的颜色填充区域
- c++ - 在 VSCode 中找不到“显示调用层次结构”
- javascript - 如何通过赛普拉斯为以下主体请求做出断言。谢谢
- python - 在 Python OpenCV 中是否有正常的倒带(或跳转到特定帧)方法?
- php - 使用频率向量查看哪个属性最常见并打分
- google-apps-script - 获取链接到电子表格的所有 Google 表单的 ID
- javascript - 单击角度中的禁用选项时弹出通知
- java - 如何将带有 AES_ENCRYPT 的 mariadb ddl 转换为 jooq?