Elasticsearch 字段为空(null)记录查询

Posted illusioned

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch 字段为空(null)记录查询相关的知识,希望对你有一定的参考价值。

在Elasticsearch 的使用和不断深入中,我们常常会遇到各种各样的问题;
在此,记录下Elasticsearch 字段为空记录查询;
 
1.查询为空的字段
我们查询某个字段为空的数据时,在mysql中:
select eid,ent_name from ent_search where enttype_code is NULL;
在elasticsearch中,我们使用的api为exists,这个查询是:查询这个字段为空的或者没有这个字段的:
GET ent_search/_search
{
  "_source": ["eid","ent_name"],
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "enttype_code"
                }
            }
        }
    }}
 
2.查询某个不为空的字段
我们查询某个字段不为空的数据时,在mysql中:
select eid,ent_name from ent_search where enttype_code is NOT NULL;
在elasticsearch中,我们使用的api为exists,这个查询是:
GET ent_search/_search
{
  "_source": ["eid","ent_name","enttype_code"],
  "query": {
    "constant_score": {
      "filter": {
        "exists": {
          "field": "enttype_code"
        }
      }
    }
  }}
 
### 查询例子
sql_example:
select msg,level  from jsonlog3-2019.06.26 where msg is NULL;
es_explain:
GET /jsonlog3-2019.06.26/_search
{
  "_source": ["msg","level"],
  "query": {
  "bool": {
  "must": [
    {"bool": {"must_not": [
    {"exists": {"field": "msg"}}
      ]}}
      ]
  }
}}
 
sql_example:
select msg,level  from jsonlog3-2019.06.26 where msg is not NULL;
es_explain:
GET /jsonlog3-2019.06.26/_search
{
  "_source": ["msg","level"],
  "query": {
  "bool": {
  "must": [
    {"bool": {"must": [
    {"exists": {"field": "msg"}}
      ]}}
      ]
  }
}}
 
OR
 
GET /qdtech-jsonlog3-2019.06.26/_search
{
  "_source": ["msg","level"],
  "query": {
    "constant_score": {
      "filter": {
        "exists": {
          "field": "msg"
        }
      }
    }
  }
}
 
注:es中字段不存在 和 字段为null 是同一个概念;
 

 

以上是关于Elasticsearch 字段为空(null)记录查询的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:如何在 Elasticsearch 中搜索空值

Elasticsearch:如何在 Elasticsearch 中搜索空值

Elasticsearch:如何在 Elasticsearch 中搜索空值

ElasticSearch 将 NULL 值作为空字符串或“N/A”获取

查找字段存在的所有文档:在 Elasticsearch 中它有一个值或为空

在 Confluent Elasticsearch 连接器中为空值时避免覆盖字段