对象字段类型

编辑

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

resp = client.index(
    index="my-index-000001",
    id="1",
    document={
        "region": "US",
        "manager": {
            "age": 30,
            "name": {
                "first": "John",
                "last": "Smith"
            }
        }
    },
)
print(resp)
response = client.index(
  index: 'my-index-000001',
  id: 1,
  body: {
    region: 'US',
    manager: {
      age: 30,
      name: {
        first: 'John',
        last: 'Smith'
      }
    }
  }
)
puts response
const response = await client.index({
  index: "my-index-000001",
  id: 1,
  document: {
    region: "US",
    manager: {
      age: 30,
      name: {
        first: "John",
        last: "Smith",
      },
    },
  },
});
console.log(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"
}

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

resp = client.indices.create(
    index="my-index-000001",
    mappings={
        "properties": {
            "region": {
                "type": "keyword"
            },
            "manager": {
                "properties": {
                    "age": {
                        "type": "integer"
                    },
                    "name": {
                        "properties": {
                            "first": {
                                "type": "text"
                            },
                            "last": {
                                "type": "text"
                            }
                        }
                    }
                }
            }
        }
    },
)
print(resp)
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
const response = await client.indices.create({
  index: "my-index-000001",
  mappings: {
    properties: {
      region: {
        type: "keyword",
      },
      manager: {
        properties: {
          age: {
            type: "integer",
          },
          name: {
            properties: {
              first: {
                type: "text",
              },
              last: {
                type: "text",
              },
            },
          },
        },
      },
    },
  },
});
console.log(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。可以将新属性添加到现有对象。

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