如何通过Elasticsearch精确检索文档中的null字段值?

2026-05-21 04:154阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计557个文字,预计阅读时间需要3分钟。

如何通过Elasticsearch精确检索文档中的null字段值?

1. 背景介绍:当我们向ES中写入数据时,有时数据写入到ES中的字段是null,或者没有写入这个字段,那么这时如何在ES中查询出这种null的数据呢?

2.需求:我们需要确认我们的mapping设置是否存在,如下所示:

1、背景

在我们向es中写入数据时,有些时候数据写入到es中的是null,或者没有写入这个字段,那么这个时候在es中该如何查询出这种为null的数据呢?

2、需求

假设我们的mapping存在 如下2个字段name和address,其中 name是keyword类型且使用了null_value来处理null值,address字段是text类型。

我们插入数据时,存在name和address字段都不存在的,存在name和address是[]或null的数据,我们需要查询出来这些数据。

3、准备数据

3.1 创建mapping

PUT /index_null_value { "mappings": { "properties": { "name":{ "type": "keyword", "null_value": "--" }, "address":{ "type": "text" }, "age":{ "type": "integer", "null_value": "-1" } } } }

注意:

  • null_value 需要和字段的 类型值 保持一致,比如上方的age是integer类型,那么null_value的值就必须是integer类型。
  • null_value 不会修改 _source中的值
  • []空数组是不会被null_value替换的,因为[]中不包含明确的null
  • null_value可以修饰的数据类型有限,比如text类型不可使用。
  • 3.2 插入数据

    PUT /index_null_value/_bulk {"index":{"_id":0}} {"age":10} {"index":{"_id":1}} {"name":null,"address": null,"age":10} {"index":{"_id":2}} {"name":[],"address":[],"age":20} {"index":{"_id":3}} {"name":[null],"address":[null],"age":60} {"index":{"_id":4}} {"name":[null,"123"],"address":[null,"123"],"age":70} {"index":{"_id":5}} {"name":["123",null],"address":["123",null],"age":80} {"index":{"_id":6}} {"name":["123","456"],"address":["123","456"],"age":90}
  • 数据中存在 name和 address字段都不存在的
  • 数据中存在 name和 address字段 是 [] 的
  • 数据中存在 name和 address字段 是 [null] 的
  • 数据中存在 name和 address字段 都有值的
  • 4、查询 name字段为null的数据

    5、查询address不存在或值直接为null的数据

    6、参考链接

    1、www.elastic.co/guide/en/elasticsearch/reference/8.6/null-value.html 2、www.elastic.co/guide/en/elasticsearch/reference/8.6/query-dsl-exists-query.html

    如何通过Elasticsearch精确检索文档中的null字段值?

    本文共计557个文字,预计阅读时间需要3分钟。

    如何通过Elasticsearch精确检索文档中的null字段值?

    1. 背景介绍:当我们向ES中写入数据时,有时数据写入到ES中的字段是null,或者没有写入这个字段,那么这时如何在ES中查询出这种null的数据呢?

    2.需求:我们需要确认我们的mapping设置是否存在,如下所示:

    1、背景

    在我们向es中写入数据时,有些时候数据写入到es中的是null,或者没有写入这个字段,那么这个时候在es中该如何查询出这种为null的数据呢?

    2、需求

    假设我们的mapping存在 如下2个字段name和address,其中 name是keyword类型且使用了null_value来处理null值,address字段是text类型。

    我们插入数据时,存在name和address字段都不存在的,存在name和address是[]或null的数据,我们需要查询出来这些数据。

    3、准备数据

    3.1 创建mapping

    PUT /index_null_value { "mappings": { "properties": { "name":{ "type": "keyword", "null_value": "--" }, "address":{ "type": "text" }, "age":{ "type": "integer", "null_value": "-1" } } } }

    注意:

  • null_value 需要和字段的 类型值 保持一致,比如上方的age是integer类型,那么null_value的值就必须是integer类型。
  • null_value 不会修改 _source中的值
  • []空数组是不会被null_value替换的,因为[]中不包含明确的null
  • null_value可以修饰的数据类型有限,比如text类型不可使用。
  • 3.2 插入数据

    PUT /index_null_value/_bulk {"index":{"_id":0}} {"age":10} {"index":{"_id":1}} {"name":null,"address": null,"age":10} {"index":{"_id":2}} {"name":[],"address":[],"age":20} {"index":{"_id":3}} {"name":[null],"address":[null],"age":60} {"index":{"_id":4}} {"name":[null,"123"],"address":[null,"123"],"age":70} {"index":{"_id":5}} {"name":["123",null],"address":["123",null],"age":80} {"index":{"_id":6}} {"name":["123","456"],"address":["123","456"],"age":90}
  • 数据中存在 name和 address字段都不存在的
  • 数据中存在 name和 address字段 是 [] 的
  • 数据中存在 name和 address字段 是 [null] 的
  • 数据中存在 name和 address字段 都有值的
  • 4、查询 name字段为null的数据

    5、查询address不存在或值直接为null的数据

    6、参考链接

    1、www.elastic.co/guide/en/elasticsearch/reference/8.6/null-value.html 2、www.elastic.co/guide/en/elasticsearch/reference/8.6/query-dsl-exists-query.html

    如何通过Elasticsearch精确检索文档中的null字段值?