dynamic
编辑dynamic
编辑
当您索引包含新字段的文档时,Elasticsearch 会将该字段动态添加到文档或文档内的内部对象。以下文档添加了字符串字段 username
、对象字段 name
以及 name
对象下的两个字符串字段
response = client.index( index: 'my-index-000001', id: 1, body: { username: 'johnsmith', name: { first: 'John', last: 'Smith' } } ) puts response response = client.indices.get_mapping( index: 'my-index-000001' ) puts response
PUT my-index-000001/_doc/1 { "username": "johnsmith", "name": { "first": "John", "last": "Smith" } } GET my-index-000001/_mapping
以下文档添加了两个字符串字段:email
和 name.middle
response = client.index( index: 'my-index-000001', id: 2, body: { username: 'marywhite', email: '[email protected]', name: { first: 'Mary', middle: 'Alice', last: 'White' } } ) puts response response = client.indices.get_mapping( index: 'my-index-000001' ) puts response
PUT my-index-000001/_doc/2 { "username": "marywhite", "email": "[email protected]", "name": { "first": "Mary", "middle": "Alice", "last": "White" } } GET my-index-000001/_mapping
在内部对象上设置 dynamic
编辑
内部对象从其父对象继承 dynamic
设置。在以下示例中,在类型级别禁用了动态映射,因此不会动态添加新的顶级字段。
但是,user.social_networks
对象启用了动态映射,因此您可以向此内部对象添加字段。
response = client.indices.create( index: 'my-index-000001', body: { mappings: { dynamic: false, properties: { user: { properties: { name: { type: 'text' }, social_networks: { dynamic: true, properties: {} } } } } } } ) puts response
dynamic
的参数编辑
dynamic
参数控制是否动态添加新字段,并接受以下参数
|
新字段将添加到映射中(默认)。 |
|
新字段作为运行时字段添加到映射中。这些字段未编入索引,并且在查询时从 |
|
新字段将被忽略。这些字段将不会被索引或搜索,但仍将出现在返回结果的 |
|
如果检测到新字段,则会抛出异常并拒绝该文档。必须将新字段显式添加到映射中。 |
达到字段限制时的行为编辑
将 dynamic
设置为 true
或 runtime
只会添加动态字段,直到达到 index.mapping.total_fields.limit
。默认情况下,索引请求中包含超过字段限制的文档将会失败,除非将 index.mapping.total_fields.ignore_dynamic_beyond_limit
设置为 true
。在这种情况下,被忽略的字段将添加到 _ignored
元数据字段 中。