ES中如何实现空值和非空值的查询 |
您所在的位置:网站首页 › sql怎么查询空值的数据 › ES中如何实现空值和非空值的查询 |
问题描述:
ES中如何实现空值和非空值的查询? 实现方案:ES中可以通过exists查询实现空值和非空值的查询 ES中exists查询官方说明: https://www.elastic.co/guide/en/elasticsearch/reference/7.9/query-dsl-exists-query.html exists用来查询指定字段存在数据的记录。 以下这些情况被认为字段值为空: 在json中字段的值为为null 或 [ ]字段的mapping属性中,“index” 被设置为 false字段值的长度超过映射中的 ignore_above 设置字段值格式错误并且在映射中定义了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种情况。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |