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

目录
相关文章
|
存储 SQL 缓存
Hadoop入门(一篇就够了)
Hadoop入门(一篇就够了)
45364 6
Hadoop入门(一篇就够了)
|
存储 缓存 自然语言处理
Elasticsearch 查询性能优化:从 3 秒到 300ms 的 6 个核心参数调优指南
本文分享某电商平台 Elasticsearch 性能调优实战,通过调整分片数、刷新间隔、缓存配置等 6 个核心参数,将商品搜索从 3 秒优化至 300 毫秒,显著提升查询性能与系统吞吐量。内容涵盖性能诊断、参数调优逻辑、实操方案及避坑指南,助力高频查询场景下的 ES 优化。
|
7月前
|
人工智能 Linux 网络安全
Skiller:一款跨平台的Skills管理工具
Skiller 是一款开源 AI 编程技能统一管理工具,支持 Claude Code、OpenCode、Cursor 等多平台。一次配置,多端分发;提供复制/软链接双模式、NPX 在线搜索、标签分类与团队协作功能,解决技能重复配置、版本混乱、共享困难等痛点。
1359 1
Skiller:一款跨平台的Skills管理工具
|
JSON JavaScript 前端开发
4. JSON字符串是如何被解析的?JsonParser了解一下(中)
4. JSON字符串是如何被解析的?JsonParser了解一下(中)
4. JSON字符串是如何被解析的?JsonParser了解一下(中)
|
XML JSON API
如何从 Swagger 导出 API 文档
Swagger 使这项任务相对简单,允许开发者以各种格式(如 JSON 和 YAML)导出 API 文档。在这篇博文中,我们将详细探讨如何从 Swagger 导出 API 文档。
如何从 Swagger 导出 API 文档
Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
【7月更文挑战第2天】Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
|
存储 缓存 监控
极致 ElasticSearch 调优,让你的ES 狂飙100倍!
尼恩分享了一篇关于提升Elasticsearch集群的整体性能和稳定性措施的文章。他从硬件、系统、JVM、集群、索引和查询等多个层面对ES的性能优化进行分析,帮助读者提升技术水平。
|
自然语言处理 应用服务中间件 nginx
一文教会你 分词器elasticsearch-analysis-ik 的安装使用【自定义分词库】
这篇文章是关于如何在Elasticsearch中安装和使用ik分词器的详细教程,包括版本匹配、安装步骤、分词测试、自定义词库配置以及创建使用ik分词器的索引的方法。
一文教会你 分词器elasticsearch-analysis-ik 的安装使用【自定义分词库】
|
Docker 容器
成功解决:Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but
这篇文章讨论了在使用Docker启动Elasticsearch容器时遇到的一个具体问题:由于配置文件`elasticsearch.yml`解析出错导致容器启动失败。文章提供了详细的排查过程,包括查看容器的日志信息、检查并修正配置文件中的错误(特别是空格问题),并最终成功重新启动了容器。