3.4.2.10.Dynamic Mapping
创作人:骆潇龙
通常来说,搜索数据一般需要经过 3 个步骤:
l 定义数据(建表建索引)
l 录入数据
l 搜索数据
在现实使用中,定义数据往往是比较繁琐,并且有大量的重复操作。
Elasticsearch 本着让用户使用更方便快捷的原则,针对这个问题做了很多工作,使定义数据的方式更加抽象灵活,多个雷同的字段可使用 1 个配置完成。
比较有代表性的2个功能分别是:
l 索引模板(index template):可以根据规则自动创建索引。
l 动态映射(dynamic mapping):自动将新字段添加到映射中。
本小节我们着重介绍动态映射(dynamic mapping)
根据官方的定义动态映射可以自动检测和添加新字段(field)到映射(mapping)中。动态映射可以通过基础属性自动发现(Dynamic field mappings)以及复杂属性动态生成(Dynamictemplates)2个方式实现此功能。
动态字段映射(Dynamic field mappings)
在默认情况下,当索引一个文档时有字段是在映射中没有配置的,那么 Elasticsearch 将会根据该属性的类型,自动将其增加到映射中。该功能可以通过配置dynamic来控制打开。
该配置可以接受以下 3 种选择:
l true:默认配置,新字段将会自动加入映射中,并自动推断字段的类型。
l false:新字段不会增加到映射中,因此不能被搜索,但是内容依然会保存在_source中。如无特殊需要建议都配置为 false,这样可以避免写入流程经过 master 节点,从而提高性能。
l strict:索引文档时如果发现有新字段则报错,整个文档都不会被索引。
该配置可以在创建 mapping 时在根层配置,表示对所有属性适用。也可以每个内嵌对象
(inner object)中配置,表示仅对该对象适用。
示例如下:
# 创建 test-dynamic-mapping PUT test-dynamic-mapping { "mappings": { "dynamic": false, # 1 "properties": { "person":{ "dynamic": true, # 2 "properties": { "name":{ "type":"keyword" } } }, "company":{ "dynamic": "strict", # 3 "properties": { "company_id":{ "type":"keyword" } } } } } }
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.10.Dynamic Mapping(2) https://developer.aliyun.com/article/1230518