Elasticserach内嵌对象过滤聚合
比如某一个内嵌对象的字段形式为
{
type:汽车车型
style:汽车车系
}
此时选出了具有某种汽车车型比如 五菱的人,数据在此字段中还包含 奥迪汽车。
{
"size": 0,
"query": {
"nested": {
"path": "car",
"query": {
"regexp":{
"car.type": {
"value": "比亚迪"
}
}
}
}
}
, "aggs": {
"res":{
"filter": {
"nested": {
"path": "car",
"query": {
"regexp":{
"car.type": {
"value": "比亚迪"
}
}
}
}
},
"aggs": {
"res_nest": {
"nested": {
"path": "car"
},
"aggs": {
"fun":{
"terms": {
"field": "car.type",
"size": 10
}
}
}
}
}
}
}
}
此时fun桶内的数据不是基于res桶内的,而是基于nested聚合的结果,所以要想使用res桶内的数据必须如下所示:
{
"size": 0,
"query": {
"nested": {
"path": "car",
"query": {
"regexp":{
"car.type": {
"value": "比亚迪"
}
}
}
}
}
, "aggs": {
"nested":{
"nested": {
"path": "car"
},
"aggs": {
"filter_term": {
"filter": {
"regexp":{
"car.type": {
"value": "比亚迪"
}
}
},
"aggs": {
"fun":{
"terms": {
"field": "car.type",
"size": 3
}
}
}
}
}
}
}
}