ES中如何实现空值和非空值的查询

问题描述:

ES中如何实现空值和非空值的查询?


实现方案:

ES中可以通过exists查询实现空值和非空值的查询

ES中exists查询官方说明:
https://www.elastic.co/guide/en/elasticsearch/reference/7.9/query-dsl-exists-query.html

exists用来查询指定字段存在数据的记录。
以下这些情况被认为字段值为空:

  1. 在json中字段的值为为null 或 [ ]
  2. 字段的mapping属性中,“index” 被设置为 false
  3. 字段值的长度超过映射中的 ignore_above 设置
  4. 字段值格式错误并且在映射中定义了ignore_malformed

实战演示:

1、数据准备

创建订单索引order_index,并添加测试数据。

## 删除索引
DELETE order_index
## 新建索引,通过参数ignore_above设置长度大于2的姓名会被认为是空值
PUT order_index
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword",
        "ignore_above": 2
      },
      "amount": {
        "type": "integer"
      }
    }
  }
}
## 添加数据
POST order_index/_bulk?refresh
{ "create": { } }
{ "amount": 100}
{ "create": { } }
{   "name": null,"amount": 80}
{ "create": { } }
{ "name": "东方不败", "amount": 15}
{ "create": { } }
{ "name": [],"amount": 80}
{ "create": { } }
{ "name": "老万", "amount": 300}
{ "create": { } }
{ "name": "老王", "amount": 45}
{ "create": { } }
{ "name": "小明", "amount": 15}

2、空值查询

说明:查询name字段为空的记录。

GET order_index/_search
{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "name"
        }
      }
    }
  }
}

3、非空值查询

说明:查询name字段不为空的记录。

GET order_index/_search
{
  "query": {
    "exists": {
      "field": "name"
    }
  }
}

4、sql查询

## 空值查询
POST /_sql?format=txt
{
  "query": "SELECT name,amount FROM order_index Where name is null"
}

## 非空查询
POST /_sql?format=txt
{
  "query": "SELECT name,amount FROM order_index Where name is not null"
}

总结

本文主要介绍了ES中如何实现空值和非空值的查询。
主要是通过exists query实现。注意exists query中会被判定为空值的4种情况。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斗者_2013

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值