原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/object.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/object.html

object(对象)数据类型

JSON文档本质上是分层的:文档可能包含内部对象,而内部对象本身又可能包含内部对象:

PUT my_index/_doc/1
{ 
  "region": "US",
  "manager": { 
    "age":     30,
    "name": { 
      "first": "John",
      "last":  "Smith"
    }
  }
}

外部文档也是一个JSON对象。

它包含一个名为manager的内部对象。

它又包含一个名为name的内部对象。

在内部,这个文档被索引为一个简单的、扁平的键值对列表,比如下面这样:

{
  "region":             "US",
  "manager.age":        30,
  "manager.name.first": "John",
  "manager.name.last":  "Smith"
}

上述文档的显式映射可能像下面这样:

PUT my_index
{
  "mappings": {
    "properties": { 
      "region": {
        "type": "keyword"
      },
      "manager": { 
        "properties": {
          "age":  { "type": "integer" },
          "name": { 
            "properties": {
              "first": { "type": "text" },
              "last":  { "type": "text" }
            }
          }
        }
      }
    }
  }
}

顶级映射定义中的属性。

字段manager是一个内部object字段。

字段manager.name是在字段manager内的一个内部object字段。

不需要将字段type显式设置为object,因为这是默认值。

object字段的参数

object字段接受以下参数:

dynamic

是否应该将新属性(properties)动态添加到现有对象中。 接受true(默认)、falsestrict

enabled

为对象字段提供的 JSON 值是应该被解析和索引(true,默认值),还是完全忽略(false)。

properties

对象中的字段,可以是任何数据类型(datatype),包括object。 可以向现有对象添加新属性。

如果需要索引对象数组而不是单个对象,请先阅读嵌套(nested)数据类型