我有orders
这样的文件:
{
"customer":{
"id":1,
"Name":"Foobar"
},
"products":[
{
"id":1,
"name":"Television",
"category": 11
},
{
"id":2,
"name":"Smartphone",
"category": 12
}
]
}
我正在执行top_terms_aggregation
以了解产品畅销商品。为了全球化,我使用:
{
"size":0,
"aggs":{
"products":{
"nested":{
"path":"products"
},
"aggs":{
"top_terms_aggregation":{
"terms":{
"field":"products.id",
"size":10
}
}
}
}
}
}
但是,我如何过滤给定category_id
的产品?我尝试添加此过滤器:
"query":{
"bool":{
"must":[
{
"match":{
"products.category":11
}
}
]
}
}
但是这会过滤具有给定类别的某些产品的订单本身,并且聚合会损坏。
我希望将属于的畅销产品推荐给特定类别。
答案 0 :(得分:1)
您可以使用filter aggregation
<dependency>
<groupId>com.github.hibernate-redis</groupId>
<artifactId>hibernate-redis</artifactId>
<version>1.6.8</version>
</dependency>
答案 1 :(得分:1)
解决这个问题:
{
"size":0,
"aggs":{
"products":{
"nested":{
"path":"products"
},
"aggs":{
"first_filter":{
"filter":{
"term":{
"products.category":11
}
},
"aggs":{
"top_terms_aggregation":{
"terms":{
"field":"products.id",
"size":10
}
}
}
}
}
}
}
}
必须是aggs
或&#34;陌生事物的确切序列&#34;发生的情况。