这是我的查询。我想要获得所有内部产品" men_fashion"和" men_shoes"类别(类别用作术语/标签)。然后我想查询整个结果集并搜索那些有" men boots yellow"在他们中间。
以下查询完全正常,但现在我没有得到正确的聚合结果。它给了我所有品牌,因为我只对品牌感兴趣。
{
"size": 15,
"from": 0,
"query": {
"query_string": {
"query": "men boots yellow"
}
},
"filter": {
"bool": {
"must": [{
"match": {
"active": 1
}
}, {
"match": {
"category": "men_fashion"
}
}, {
"match": {
"category": "men_shoes"
}
}]
}
},
"aggs": {
"brands": {
"terms": {
"size": 100,
"field": "brand"
}
}
}
}
我认为这可能是由于我已应用的过滤器,但如果这有点复杂,我可以使用一个简单的查询来实现这一点而不需要过滤器。
答案 0 :(得分:1)
您使用的是post filter而不是普通的查询过滤器,请尝试这样:
{
"size": 15,
"from": 0,
"query": {
"bool": {
"must": {
"query_string": {
"query": "men boots yellow"
}
},
"filter": [
{
"match": {
"active": 1
}
},
{
"match": {
"category": "men_fashion"
}
},
{
"match": {
"category": "men_shoes"
}
}
]
}
},
"aggs": {
"brands": {
"terms": {
"size": 100,
"field": "brand"
}
}
}
}