问题描述:
在聚合嵌套文档的时候,使用exists剔除不存在的字段。起初认为下面两种写法的是一样的。
第一种:
{
"aggs": {
"人数": {
"filter": {
"nested": {
"path": "t_tyyw_xj_ysgs_xyr",
"query": {
"exists": {
"field": "t_tyyw_xj_ysgs_xyr.sjrq"
}
}
}
},
"aggs": {
"NAME": {
"nested": {
"path": "t_tyyw_xj_ysgs_xyr"
},
"aggs": {
"COUNT": {
"value_count": {
"field": "t_tyyw_xj_ysgs_xyr.zrrbm.keyword"
}
}
}
}
}
}
}
}
第二种:
{
"aggs": {
"人数": {
"nested": {
"path": "t_xj_ysgs_xyr"
},
"aggs": {
"NAME": {
"filter": {
"exists": {
"field": "t_xj_ysgs_xyr.sjrq"
}
},
"aggs": {
"count": {
"value_count": {
"field": "t_xj_ysgs_xyr.zrrbm.keyword"
}
}
}
}
}
}
}
}
聚合结果发现两种写法的数据不一致。第一种写法并不能把一部分缺省的字段 t_xj_ysgs_xyr.sjrq 剔除掉。查询结果数据部分截图如下:

结果表明,只要 nested 字段中有满足的条件的值,那么缺省的字段不会被剔除。而第二种写法可以将缺省的字段剔除掉。
Elasticsearch聚合技巧
1795

被折叠的 条评论
为什么被折叠?



