1.Mapping字段的相关配置
(1).enabled
- 值选项:true | false
- 使用场景:默认为true,如果设置为false则该字段仅做存储,不做搜索、算分排序和聚合分析
(2).index
- 值选项:true | false
- 使用场景:是否构建倒排索引,如果设置为false,则该字段不做搜索
(3).doc_values
- 值选项:true | false
- 使用场景:是否启动doc_values,如果设置为false,则该字段不做算分排序和聚合分析
(4).norms
- 值选项:true | false
- 使用场景:在算分排序时使用,如果字段仅用于搜索和聚合分析,可设置为false
(5).index_options
- 值选项:docs | freqs | positions | offsets
- 使用场景:存储倒排索引的相关信息
(6).field_data
- 值选项:true | false
- 使用场景:当字段type为text类型时启用,实现算分排序和聚合分析
(7).store
- 值选项:true | false
- 使用场景:是否存储该字段,默认不存储,因为elasticsearch原始数据存储在_source字段
(8).coerce
- 值选项:true | false
- 使用场景:是否开启数据类型自动转化功能,比如字符串转为数字、浮点转为整型等
(9).dynamic
- 值选项:true | false | strict
- 使用场景:控制mapping自动更新
2.Mapping设计
(1).字段属性的设定流程
- 判断该字段是何种类型,是日期类型还是字符串类型
- 判断该字段是否需要检索,需要时则将index设置为true
- 判断该字段是否需要排序或聚合分析,需要时则将doc_values设置为true,fielddata设定为true
- 判断该字段是否需要另行存储,需要时则将store设置为true
(2).字段是何种类型
- 字符串类型:需要分词则设定为text,否则设置为keyword
- 枚举类型:基于性能考虑将其设定为keyword,即便该数据为整型
- 数值类型:尽量选择贴近的类型,比如byte可表示所有数值的时候,即选用byte,不要用long
- 其他类型的,比如布尔类型、日期、地理位置等
(3).字段是否需要检索
- 完全不需要检索、排序、聚合分析:enabled设置为false
- 不需要检索:index设置为false
- 需要检索:可以通过index_options和norms配置设定需要的存储粒度
(4).字段是否需要排序或聚合分析
不需要进行排序或者聚合分析功能的字段,doc_values设定为false、fielddata设定为false即可。
(5).字段是否需要另行存储
如果需要专门存储当前字段的数据,则将store设定为true,即可以存储该字段的原始内容(与_source中的原始数据是不相关的)。一般store设置为true时,会把_source的enabled设定为false。