object 字段类型
JSON 文档本质上是分层的:文档可能包含内部对象,而内部对象又可能包含其他内部对象:
PUT my-index-000001/_doc/1
{
"region": "US",
"manager": {
"age": 30,
"name": {
"first": "John",
"last": "Smith"
}
}
}
- 外部文档也是一个 JSON 对象。
- 它包含一个名为
manager的内部对象。 - 而
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" }
}
}
}
}
}
}
}
- 顶层
mappings定义中的属性。 manager字段是一个内部对象字段。manager.name字段是manager字段内的一个内部对象字段。
你不需要将字段类型显式设置为 object,因为这是默认值。
object 字段的参数
object 字段接受以下参数:
dynamic(可选,字符串)是否应将新属性动态添加到现有对象。接受true(默认)、runtime、false和strict。enabled(可选,Boolean)是否应该解析并索引为对象字段给定的 JSON 值(true,默认),还是完全忽略它(false)。subobjects(可选,Boolean)对象是否可以包含子对象(true,默认)。如果不能,名称中带点的子字段将被视为叶子字段;否则,它们的字段名称将被展开为相应的对象结构。properties(可选,对象)对象内的字段,可以是任何数据类型,包括object。可以向现有对象添加新属性。
如果你需要索引对象数组而不是单个对象,请先阅读 nested。