null_value编辑

null 值无法被索引或搜索。当一个字段被设置为 null 时(或者是一个空数组或一个包含 null 值的数组),它将被视为该字段没有值。

null_value 参数允许您将显式的 null 值替换为指定的值,以便可以对其进行索引和搜索。例如

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        status_code: {
          type: 'keyword',
          nil_value: 'NULL'
        }
      }
    }
  }
)
puts response

response = client.index(
  index: 'my-index-000001',
  id: 1,
  body: {
    status_code: nil
  }
)
puts response

response = client.index(
  index: 'my-index-000001',
  id: 2,
  body: {
    status_code: []
  }
)
puts response

response = client.search(
  index: 'my-index-000001',
  body: {
    query: {
      term: {
        status_code: 'NULL'
      }
    }
  }
)
puts response
PUT my-index-000001
{
  "mappings": {
    "properties": {
      "status_code": {
        "type":       "keyword",
        "null_value": "NULL" 
      }
    }
  }
}

PUT my-index-000001/_doc/1
{
  "status_code": null
}

PUT my-index-000001/_doc/2
{
  "status_code": [] 
}

GET my-index-000001/_search
{
  "query": {
    "term": {
      "status_code": "NULL" 
    }
  }
}

将显式的 null 值替换为术语 NULL

空数组不包含显式的 null,因此不会被 null_value 替换。

NULL 的查询将返回文档 1,但不返回文档 2。

null_value 的数据类型需要与字段的数据类型相同。例如,long 字段不能具有字符串类型的 null_value

null_value 只会影响数据的索引方式,不会修改 _source 文档。