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

目录
相关文章
|
JSON Ubuntu Java
Elasticsearch聚合学习之四:结果排序
在前面的实战中,聚合的结果以桶(bucket)为单位,放在JSON数组中返回,这些数据是没有排序的,今天来学习如何给这些数据进行排序
787 0
Elasticsearch聚合学习之四:结果排序
|
Java Spring
spring data elasticsearch: 设置保活策略|长时间不连接es,报错超时连接
java client长时间没有连接es后,再次调用访问接口,报错连接超时
2665 0
|
存储 缓存 自然语言处理
Elasticsearch 查询性能优化:从 3 秒到 300ms 的 6 个核心参数调优指南
本文分享某电商平台 Elasticsearch 性能调优实战,通过调整分片数、刷新间隔、缓存配置等 6 个核心参数,将商品搜索从 3 秒优化至 300 毫秒,显著提升查询性能与系统吞吐量。内容涵盖性能诊断、参数调优逻辑、实操方案及避坑指南,助力高频查询场景下的 ES 优化。
|
11月前
|
JSON 监控 供应链
京东SPU/SKU数据接口全解读:商品详情API文档
京东开放平台商品详情API提供标准化接口,支持获取SPU/SKU信息,适用于价格监控、库存管理等场景。支持HTTPS与JSON格式,具备高效性与扩展性。
|
存储 缓存 监控
极致 ElasticSearch 调优,让你的ES 狂飙100倍!
尼恩分享了一篇关于提升Elasticsearch集群的整体性能和稳定性措施的文章。他从硬件、系统、JVM、集群、索引和查询等多个层面对ES的性能优化进行分析,帮助读者提升技术水平。
|
存储 自然语言处理 Java
Elasticsearch常见错误及如何排查错误
Elasticsearch常见错误及如何排查错误
1083 0
|
存储 Java API
ES多字段匹配查询时的权重控制
ES多字段匹配查询时的权重控制
1600 0
ES多字段匹配查询时的权重控制
Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
【7月更文挑战第2天】Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
|
SQL JSON 分布式计算
干货 | Elasticsearch、Kibana数据导出实战
以下两个导出问题来自Elastic中文社区。 问题1、kibana怎么导出查询数据? 问题2:elasticsearch数据导出 就像数据库数据导出一样,elasticsearch可以么? 或者找到它磁盘上存放数据的位置,拷贝出来,放到另一个es服务器上或者转成自己要的数据格式?
干货 | Elasticsearch、Kibana数据导出实战
|
消息中间件 Java 关系型数据库
【二十】springboot整合ElasticSearch实战(万字篇)
【二十】springboot整合ElasticSearch实战(万字篇)
4076 47