对象字段类型
JSON 文档本质上是分层的:文档可能包含内部对象,而这些内部对象本身又可能包含内部对象。
PUT my-index-000001/_doc/1 { <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-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 字段接受以下参数:
动态- 是否将新的
properties动态添加到现有对象。接受true(默认)、runtime、false和strict。 启用- 是否解析和索引(
true,默认)给对象字段的 JSON 值,或者完全忽略(false)。 subobjects- 该对象是否可以包含子对象(
true,默认)或不可以(false)。如果不行,带有点的字段名称将被视为叶子节点,否则它们的字段名称将被展开为其对应的对象结构。 properties- 对象内的字段,可以是任何 数据类型,包括
object。可以向现有对象添加新属性。
重要提示
如果您需要索引对象数组而不是单个对象,请先阅读 Nested。