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

简介: 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种情况。

目录
相关文章
|
7月前
|
前端开发 小程序
ES6 数组中的对象去重
ES6 数组中的对象去重
|
2月前
|
SQL 数据库
SQL查询中排除空值列的技巧与方法
在数据库查询中,经常需要处理包含空值(NULL)的数据列
|
4月前
|
JavaScript 前端开发
ES6 中新增的两种数据类型及类型判断 ( 二 )
ES6 中新增的两种数据类型及类型判断 ( 二 )
|
4月前
|
存储 JavaScript 前端开发
ES6 中新增的两种数据类型及类型判断 ( 一 )
ES6 中新增的两种数据类型及类型判断 ( 一 )
|
5月前
|
SQL 存储 API
ES 实战复杂sql查询、修改字段类型
ES 实战复杂sql查询、修改字段类型
124 1
|
4月前
|
SQL 关系型数据库 MySQL
mysql不等于<>取特定值反向条件的时候字段有null值或空值读取不到数据
对于数据库开发的专业人士来说,理解NULL的特性并知道如何正确地在查询中处理它们是非常重要的。以上所介绍的技巧和实例可以帮助你更精准地执行数据库查询,并确保数据的完整性和准确性。在编写代码和设计数据库结构时,牢记这些细节将有助于你避免许多常见的错误,提高数据库应用的质量与性能。
145 0
|
6月前
|
SQL 安全 数据挖掘
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
Elasticsearch聚合查询用于复杂数据分析,包括统计空值率。示例展示了如何计算字段`my_field`非空非零文档的百分比。查询分为三步:总文档数计数、符合条件文档数计数及计算百分比。聚合概念涵盖度量、桶和管道聚合。脚本在聚合中用于动态计算。常见聚合类型如`sum`、`avg`、`date_histogram`等。组合使用可实现多值统计、嵌套聚合和空值率计算。[阅读更多](https://zhangfeidezhu.com/?p=515)
320 0
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
|
存储 关系型数据库 MySQL
MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?
一篇短文让你明白MySQL数据库的表中 NULL 和 空值之间的区别!
4963 0
MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?
|
7月前
|
SQL
Sql语法:字段不为空
Sql语法:字段不为空
|
7月前
|
SQL 前端开发 关系型数据库
MYSQL基础知识之【LIKE子句的使用 ,NULL值的处理,空值的处理】
MYSQL基础知识之【LIKE子句的使用 ,NULL值的处理,空值的处理】
147 0