我正在寻找一种解决方案来获取聚合,每个字段一个,但在不同的聚合上应用不同的查询条件。
我有一个产品集合,它具有属性:type
、color
、brand
。用户选择:brand
=间隙,color
=白色,type
=凉鞋。要显示每个聚合处各种类似产品的计数,请执行以下操作:
brand
聚合查询条件:color
=白色,type
=凉鞋color
聚合的查询条件:brand
=间隙,以及type
=凉鞋type
聚合的查询条件:brand
=间隙,color
=白色
这可以在单个 ElasticSearch 查询中完成吗?
您将创建三个聚合,每个聚合都有一个filter
agg,并在其中添加所需的查询。我使用了最简单的一个 - bool
term
- 只是为了展示高级方法:
"aggs": {
"brand_agg": {
"filter": {
"bool": {
"must": [
{
"term": {
"color": "white"
}
},
{
"term": {
"type": "sandal"
}
}
]
}
}
},
"color_agg": {
"filter": {
"bool": {
"must": [
{
"term": {
"brand": "gap"
}
},
{
"term": {
"type": "sandal"
}
}
]
}
}
},
"type_agg": {
"filter": {
"bool": {
"must": [
{
"term": {
"color": "white"
}
},
{
"term": {
"brand": "gap"
}
}
]
}
}
}
}