对象字段类型编辑

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

response = client.index(
  index: 'my-index-000001',
  id: 1,
  body: {
    region: 'US',
    manager: {
      age: 30,
      name: {
        first: 'John',
        last: 'Smith'
      }
    }
  }
)
puts response
PUT my-index-000001/_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"
}

上述文档的显式映射可能如下所示

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        region: {
          type: 'keyword'
        },
        manager: {
          properties: {
            age: {
              type: 'integer'
            },
            name: {
              properties: {
                first: {
                  type: 'text'
                },
                last: {
                  type: 'text'
                }
              }
            }
          }
        }
      }
    }
  }
)
puts response
PUT my-index-000001
{
  "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(默认)、runtimefalsestrict

enabled

对象字段给定的 JSON 值是否应该被解析和索引(true,默认)或完全忽略(false)。

subobjects

对象是否可以包含子对象(true,默认)或不能(false)。如果不是,则名称中带有点的子字段将被视为叶子,否则它们的字段名称将扩展到其对应的对象结构。

properties

对象内的字段,可以是任何 数据类型,包括 object。可以将新属性添加到现有对象。

如果您需要索引对象数组而不是单个对象,请先阅读 嵌套