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

目录
相关文章
ElasticSearch Task命令说明
ElasticSearch task相关命令,以及返回信息解读。
5651 0
ElasticSearch Task命令说明
|
索引 Python
python操作Elasticsearch7.17.0
python操作Elasticsearch7.17.0 作者主页:https://www.couragesteak.com/
|
SQL 数据建模 索引
Elasticsearch 空值处理实战指南
1、引言 实战业务场景中,经常会遇到定义空值、检索指定空值数据的情况。 这时候,当我们翻看官方文档 null_value 部分,会看到如下的描述: Accepts a string value which is substituted for any explicit null values. Defaults to null, which means the field is treated as missing. 接受一个字符串值替换所有显式的空值。默认为null,这意味着该字段被视为丢失。 A null value cannot be indexed or searched. W
Elasticsearch 空值处理实战指南
|
Java 关系型数据库 BI
ES 中时间日期类型 “yyyy-MM-dd HH:mm:ss” 的完全避坑指南
ES 中时间日期类型 “yyyy-MM-dd HH:mm:ss” 的完全避坑指南
ES 中时间日期类型 “yyyy-MM-dd HH:mm:ss” 的完全避坑指南
|
自然语言处理 索引
ES中如何对text字段进行精确匹配
ES中如何对text字段进行精确匹配
1320 0
|
存储 Java 编译器
ThreadLocal、InheritThreadLocal、TransmittableThreadLocal
ThreadLocal、InheritThreadLocal、TransmittableThreadLocal
327 0
|
SQL 数据可视化 前端开发
简单好用的ElasticSearch可视化工具:es-client和Head
使用 ElasticSearch(简称 es) 的过程中,经常有一些临时查询(如 排查问题、验证效果),一个趁手的可视化工具 可以提高工作效率。个人倾向于 免费(最好开源)、易于安装(如 浏览器插件),`es-client` 就是 比较简单好用的一个,尤其是 查询
11481 0
Elasticsearch 更新指定字段
讲述Elasticsearch更新索引指定字段操作
|
消息中间件 API 数据库
elasticsearch使用指南之Elasticsearch Document Update API详解、原理与示例
本节详细介绍了Document Update API的核心关键点以及实现要点,最后给出Demo展示如何在JAVA中使用Update API。
3678 0