Elasticsearch Mapping 参数
内容提要
本文介绍了Elasticsearch中的Mapping参数,包括分词器、normalizer、boost、coerce和copy_to等配置。通过示例说明如何设置字段类型、权重、数据清理和合并字段。还讨论了动态属性、日期检测、字段索引、聚合和排序等功能,强调合理配置Mapping对搜索性能的重要性。
延伸解读
动态字段检测的三种策略
dynamic 参数控制新字段的检测行为:true 自动添加字段并推测类型,false 忽略新字段,strict 则抛出异常。文章指出,dynamic 为 true 时,Elasticsearch 会根据 JSON 值推测类型,如 null 不添加字段、布尔值映射为 boolean、浮点数映射为 floating、整数映射为 long、对象映射为 object、数组由第一个非空值决定。合理选择策略可避免 mapping 爆炸或数据丢失。
text 字段聚合的代价与替代方案
text 类型不支持 doc_values,若需聚合、排序或脚本操作,会生成 fielddata 并消耗大量堆内存。文章强调,开启 fielddata 前需明确业务必要性,因为分词后的词项(如“New York”拆为“new”和“york”)可能导致聚合结果不符合预期。推荐使用 fields 定义 keyword 子字段,兼顾全文搜索与精确聚合。
索引与存储的权衡:store 与 _source
默认情况下,字段被索引可搜索但不单独存储,原始文档保存在 _source 中。store 参数允许将特定字段单独存储,便于只检索部分字段(如 title 和 date)而避免加载大字段 content。但 stored_fields 返回的总是数组,若需原始值仍要从 _source 获取。因此,store 适用于明确只需少数字段的场景,而非替代 _source。
日期检测与自定义格式
日期检测默认开启,能识别 strict_date_optional_time 等格式的字符串并映射为 date 类型。可通过 date_detection: false 关闭,或使用 dynamic_date_formats 自定义格式(如 MM/dd/yyyy)。文章示例显示,关闭后字符串会被映射为 text 并附带 keyword 子字段。合理配置日期检测可避免误判,但需注意格式兼容性。
Q&A
Elasticsearch中的Mapping参数有哪些主要配置?
主要配置包括分词器、normalizer、boost、coerce和copy_to等。
如何使用boost字段提高搜索结果的权重?
可以在Mapping中为特定字段设置boost值,例如title字段的权重是content字段的两倍。
什么是coerce属性,它有什么作用?
coerce属性用于清除脏数据,确保数据类型一致性,默认值为true。
copy_to属性的用途是什么?
copy_to属性允许将多个字段的内容合并为一个字段,便于搜索。
dynamic属性在Mapping中有什么作用?
dynamic属性控制新字段的检测和处理方式,可以设置为true、false或strict。
如何处理字段索引的最大长度?
可以使用ignore_above属性来限制字段索引的最大长度,超出部分将被忽略。