Elasticsearch nested字段之 exists 聚合不准确

Elasticsearch聚合技巧

问题描述:
在聚合嵌套文档的时候,使用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 字段中有满足的条件的值,那么缺省的字段不会被剔除。而第二种写法可以将缺省的字段剔除掉。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值