映射决定字段怎么被索引
映射定义字段如何被索引:关键字类型用于精确匹配与聚合,文本类型会分词用于全文检索,数值与时间类型支持范围查询。字段类型写在索引里,选错会让查询与聚合同时出问题,而修正往往涉及重建索引。
两种最常见的坑
最常见的问题是用文本字段做精确匹配:分词之后原值已不存在,只能改查它的关键字子字段。另一个是想修改已有字段的类型,而这通常需要重建索引再切换别名,属于必须提前规划、不能临时处理的操作。
基本信息
| 关键字类型 | 不分词,适合枚举、标识与设备名 |
|---|---|
| 文本类型 | 分词,适合自由文本的全文检索 |
| 数值与时间 | 支持范围查询与排序 |
| 查看方式 | 通过索引的映射接口查看当前字段定义 |
典型使用场景
- 日志字段设计:标识类与枚举类字段使用关键字类型
- 全文检索:消息正文用文本类型,支持按词检索
- 聚合统计:对关键字字段做分组与排序
- 数值范围筛选:耗时与字节数用数值类型
- 字段排查:先看映射,再决定查询怎么写
字段类型与查询方式
字段类型与查询方式
# 查看当前映射
GET /logs-app/_mapping
# 追加字段(已有字段类型不能直接改,需重建索引)
PUT /logs-app/_mapping
{
"properties": {
"trace_id": { "type": "keyword" }, # 精确匹配与聚合
"duration_ms": { "type": "long" }, # 范围查询
"message": { "type": "text" } # 全文检索
}
}类型选择
| 类型 | 特点 | 适用字段 |
|---|---|---|
| 关键字 | 不分词,可精确匹配与聚合 | 标识、枚举、状态码 |
| 文本 | 分词,支持全文检索 | 消息正文、描述性文本 |
| 数值 | 支持范围查询与排序 | 耗时、字节数、计数 |
| 时间 | 支持时间范围筛选 | 时间戳字段 |
一条经验规则:会被用来过滤与聚合的字段用关键字类型,会被用来做全文搜索的字段用文本类型。
已有字段类型不能原地改成不兼容类型:需要重建索引再切换别名,改动前必须评估数据量与可用窗口。