Elasticsearch 映射参数详解:定制字段的索引与检索行为
映射参数(Mapping Parameters)是 Elasticsearch 中用于定制字段行为的核心配置,通过这些参数可以控制字段的分词方式、数据处理、索引策略等,以适配不同的业务场景。以下是 6.8.x 版本中常用映射参数的详细解析。
analyzer:字符串分词器配置
analyzer 用于指定索引时处理字符串字段的分词器,决定如何将文本拆分为词项(Term)。查询时的分词器由 search_analyzer 或默认规则决定。
核心作用
- 定义字符串字段的分词逻辑(如中文分词、英文词干提取等)。
- 支持预定义分析器(如
standard、ik_smart)或自定义分析器。
分析器查找顺序
- 索引时:字段映射中定义的
analyzer→ 索引设置中的default分析器 → 标准分析器(standard)。 - 查询时:查询中指定的
analyzer→ 字段映射的search_analyzer→ 字段映射的analyzer→ 索引设置的default_search→ 索引设置的default→ 标准分析器。
配置示例(自定义分析器)
1 | PUT my_index |
注意
- 文本字段(
text)必须配置分析器,关键词字段(keyword)不分词,无需指定。 - 中文分词需依赖第三方插件(如 IK 分词器),并在
analyzer中指定(如ik_max_word)。
normalizer:关键词标准化器
normalizer 仅用于 keyword 类型字段,在索引前对字段值进行标准化处理(如大小写转换、特殊字符处理),确保精确匹配的一致性。
核心作用
- 统一
keyword字段的格式(如将 “Hello”“HELLO” 统一为 “hello”)。 - 与
analyzer的区别:normalizer不分词,仅做字符级转换;analyzer用于text字段,会分词。
配置示例
1 | PUT my_index |
boost:字段权重调整
boost 用于调整字段在相关性得分中的权重,权重越高,匹配该字段的文档得分越高。
核心说明
- 索引时
boost:5.0 版本后废弃,不再支持在映射中配置(历史用法为{"type": "text", "boost": 2})。 - 查询时
boost:推荐使用,在查询语句中为字段临时加权,不影响索引结构。
配置示例(查询时加权)
1 | GET my_index/_search |
coerce:数据类型强制转换
coerce 控制是否自动将 “脏数据” 转换为字段声明的类型(如字符串转数字、浮点数转整数)。
核心作用
- 容忍数据格式不严格的情况(如用户输入的数字带引号:
"5"→ 5)。 - 禁用后,格式错误的数据会导致文档写入失败。
配置示例
1 | PUT my_index |
copy_to:多字段值合并
copy_to 允许将多个字段的值复制到一个 “聚合字段”,便于通过单个字段查询多个字段的内容(类似自定义 _all 字段)。
核心作用
- 合并分散在多个字段中的相关信息(如
first_name和last_name合并为full_name)。 - 原始字段仍可单独查询,聚合字段仅用于联合查询。
配置示例
1 | PUT my_index |
doc_values 与 fielddata:排序与聚合支持
两者均为支持排序、聚合、脚本访问的数据结构,核心区别在于适用字段类型和存储方式。
doc_values
- 作用:为非
text字段(如keyword、数字、日期)提供排序 / 聚合支持,默认开启。 - 存储:索引时创建,磁盘存储,列存结构,适合大规模数据。
- 禁用场景:确定字段无需排序 / 聚合时,禁用以节省磁盘空间。
fielddata
- 作用:为
text字段提供排序 / 聚合支持,默认关闭(因内存开销大)。 - 存储:查询时动态创建,内存存储,适合小规模文本字段。
配置示例
1 | PUT my_index |
dynamic:动态字段控制
dynamic 控制是否自动为文档中新增的未知字段创建映射。
取值说明
true:自动添加新字段到映射(默认)。false:忽略新字段,不添加到映射(文档可写入,但新字段不可查)。strict:检测到新字段时抛出异常,阻止文档写入。
配置示例
1 | PUT my_index |
enabled:字段内容是否解析
enabled 仅用于对象字段(object),控制 Elasticsearch 是否解析字段内容(仅影响索引,不影响 _source 存储)。
核心作用
enabled: false:跳过字段解析,字段内容仅作为原始 JSON 保存在_source中,不可查询、排序或聚合。- 适用场景:存储无需检索的冗余信息(如原始日志、复杂嵌套结构)。
配置示例
1 | PUT my_index |
format:日期格式指定
format 用于 date 类型字段,指定可接受的日期格式(默认支持多种格式,如 yyyy-MM-dd、时间戳)。
配置示例
1 | PUT my_index |
其他常用参数
| 参数 | 作用说明 | 适用场景 |
|---|---|---|
ignore_above |
keyword 类型中,超过指定长度的字符串不索引(如 ignore_above: 20) |
过滤过长的关键词(如 URL、长 ID) |
ignore_malformed |
忽略格式错误的字段值(如字符串写入数字字段),不影响文档其他字段索引 | 容忍脏数据(如用户输入的非标准格式) |
index_options |
控制倒排索引存储的信息(docs/freqs/positions/offsets),影响短语查询、高亮等 |
精细化控制索引内容,平衡性能与功能 |
fields |
同一字段以多种方式索引(如 text 用于搜索,keyword 用于聚合) |
同时支持全文搜索和排序 / 聚合(如商品名称) |
norms |
存储相关性得分计算所需的标准化系数,禁用可节省内存(不影响精确匹配) | 无需相关性排序的场景(如日志检索) |
null_value |
为 null 值设置默认索引值(如 null_value: "NULL"),使空值可查询 |
需要统计或过滤空值字段的场景 |
v1.3.10