Object

原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html

译文链接 : Object

贡献者 : 彭秋源ApacheCNApache中文网

对象数据类型

JSON文档本质上是分层的:文档包含内部对象,内部对象本身还包含内部对象。

  1. curl -XPUT 'localhost:9200/my_index/my_type/1?pretty' -d'
  2. { // 1
  3. "region": "US",
  4. "manager": { // 2
  5. "age": 30,
  6. "name": { // 3
  7. "first": "John",
  8. "last": "Smith"
  9. }
  10. }
  11. }'

| 1 | 外层的文档是 JSON 对象 | | 2 | 包含称为 manager 的内部对象 | | 3 | manager 对象还包含一个内部对象称为 name |

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

  1. {
  2. "region": "US",
  3. "manager.age": 30,
  4. "manager.name.first": "John",
  5. "manager.name.last": "Smith"
  6. }

上面文档的显式映射可以长这样:

  1. curl -XPUT 'localhost:9200/my_index?pretty' -d'
  2. {
  3. "mappings": {
  4. "my_type": { // 1
  5. "properties": {
  6. "region": {
  7. "type": "keyword"
  8. },
  9. "manager": { // 2
  10. "properties": {
  11. "age": { "type": "integer" },
  12. "name": { // 3
  13. "properties": {
  14. "first": { "type": "text" },
  15. "last": { "type": "text" }
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }
  22. }
  23. }'

| 1 | 映射的类型是一个对象类型,具有一个 properties 字段 | | 2 | manager字段是一个内部object字段 | | 3 | manager.name 字段是manager字段中的一个内部object字段 |

不需要显式地将字段类型设置为object类型,因为这是默认的类型。

object字段的参数

| 参数 | 说明 | | 1 | 新属性是否应动态添加到现有对象。接受 true(默认),false 和 strict | | 2 | 是否应该对对象字段给出的JSON值进行解析和索引(true,默认)或完全忽略(false) | | 3 | 为对象中的所有属性设置默认的 include_in_all 值,对象本身没有添加到 _all 字段。 | | 4 | 对象内的字段,可以是任何数据类型,包括对象。可以将新属性添加到现有对象。 |

注意

如果你需要索引对象的数组而不是单个的对象,可以使用nested数据类型。