我在电子商务网站上使用品牌过滤器。即使已经选择了任何品牌,缩进行为仍会显示所有品牌,只有所选项目的所有项目都应过滤。
我的搜索:
"query": {
"bool": {
"must": {
"match": {
"text": {
"query":"photo"
}
}
},
"filter": [
{
"term": { "brandName": "brodit" }
}
]
}
},
"aggs": {
"Brands": {
"terms": {
"field": "brandName"
}
}
}
我的意图和我得到的:
我可以看到这种情况正在发生,因为我根据过滤器限制了结果并对过滤后的结果进行了粗略化。
答案 0 :(得分:1)
更新:执行聚合时,您可以指定要在所有文档中执行聚合。这可以通过将聚合的范围设置为使用Global Bucket来实现。这是您的查询的修改版本。
"query": {
"bool": {
"must": {
"match": {
"text": {
"query":"photo"
}
}
},
"filter": [
{
"term": { "brandName": "brodit" }
}
]
}
},
"aggs": {
"Brands": {
"global": {},
"terms": {
"field": "brandName"
}
}
}
有关详细信息,请参阅Global Bucket文档的Elasticsearch: Definitive Guide [2.x]部分。
或者,您可以执行两个查询。一个查询不返回任何搜索结果(通过设置大小= 0)以获取您要显示的过滤器选项的品牌聚合。然后,当用户选择要过滤的特定品牌时,您需要执行单独的查询而不进行聚合,以仅在搜索结果中显示属于该品牌的商品。