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