Elasticsearch字段类型
Eave
2026.09.01
一、字符串类型(最常用,容易混淆)
| 类型 | 作用 | 是否分词 | 适用场景 | 查询方式 |
|---|---|---|---|---|
text |
全文搜索,支持分词和相关性评分 | 是 | 文章内容、商品描述、邮件正文、评论 | match、match_phrase、query_string |
keyword |
精确匹配,不分词,原样存储 | 否 | ID、状态码、邮箱、标签、分类、排序字段 | term、terms、wildcard、prefix |
wildcard |
支持通配符模糊搜索,性能优于 keyword 做通配符 | 否 | UUID、订单号、路径、需要 * 模糊匹配的 ID |
wildcard、regexp、prefix |
二、数字类型
| 类型 | 取值范围 | 适用场景 |
|---|---|---|
byte |
-128 ~ 127 | 小范围整数(如年龄段、评分) |
short |
-32,768 ~ 32,767 | 小整数(如季度、月份) |
integer |
-2^31 ~ 2^31-1 | 常规整数(如用户数、库存量) |
long |
-2^63 ~ 2^63-1 | 大整数(如时间戳、大额金额) |
float |
32位浮点数 | 小数(如温度、百分比) |
double |
64位浮点数 | 高精度小数(如科学计算) |
scaled_float |
缩放存储的浮点数 | 金额(配合 scaling_factor 精确到分) |
三、时间类型
| 类型 | 说明 | 格式示例 | 适用场景 |
|---|---|---|---|
date |
日期时间,内部转为 UTC 时间戳存储 | "2026-09-01"、"2026-09-01T10:30:00"、1693555200000(毫秒时间戳) |
创建时间、更新时间、生日 |
四、布尔类型
| 类型 | 值 | 适用场景 |
|---|---|---|
boolean |
true / false,也接受 "true" / "false" |
是否启用、是否删除、是否发布 |
五、复杂类型(JSON结构)
| 类型 | 说明 | 适用场景 |
|---|---|---|
object |
默认 JSON 对象,存储嵌套文档 | 用户地址(包含省、市、区)、商品规格 |
nested |
对象数组,每个元素独立查询(关联关系不丢失) | 订单明细列表、多规格商品 SKU、多人联系方式 |
六、空间和地理位置类型
| 类型 | 说明 | 适用场景 |
|---|---|---|
geo_point |
经纬度坐标 (lat, lon) | 地图定位、附近的人/商家搜索 |
geo_shape |
地理形状(点、线、多边形) | 地图画圈查询、区域碰撞检测 |
七、特殊类型
| 类型 | 说明 | 适用场景 |
|---|---|---|
ip |
IPv4 / IPv6 地址 | 用户 IP、服务器 IP、访问来源 |
completion |
自动补全(搜索建议) | 搜索框的下拉提示、联想词 |
dense_vector |
密集向量(浮点数数组) | 语义搜索、向量相似度、AI 推荐 |
sparse_vector |
稀疏向量(大多数为 0) | NLP 特征、机器学习模型 |
binary |
Base64 编码的二进制数据 | 图片缩略图、小文件存储 |
range |
范围类型(integer_range、date_range 等) |
价格区间、活动时间段、年龄范围 |
八、数组和多元类型
| 类型 | 说明 | 示例 |
|---|---|---|
| 数组 | 任何类型都可以存储为数组,无需专门定义 | ["苹果", "香蕉"]、[1, 2, 3] |
flattened |
存储整个 JSON 对象作为关键字,不展开索引 | 日志中的动态字段、不确定结构的元数据 |
percolator |
存储查询,用于反向搜索(文档匹配查询) | 实时告警、订阅推送 |
九、对比速查表
| 需求 | 错误做法 | 正确做法 | 字段类型 |
|---|---|---|---|
| 模糊搜索 | 用 keyword + match 查询 |
用 text + match 或 keyword + wildcard |
text 或 keyword |
| 通配符搜索 | 用 text + wildcard |
用 wildcard + wildcard 查询 |
wildcard |
| 精确匹配状态码 | 用 text |
用 keyword + term 查询 |
keyword |
| 全文搜索文章内容 | 用 keyword |
用 text + match 查询 |
text |
十、Mapping配置示例(含常用类型)
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0,
"index.refresh_interval": "120s"
},
"mappings": {
"dynamic": false,
"properties": {
"id": {
"type": "wildcard" // 支持通配符模糊 示例:*e89b*
},
"name": {
"type": "text", // 全文搜索
"analyzer": "ik_max_word", // 索引分词器
"search_analyzer": "ik_smart" // 搜索分词器
},
"status": {
"type": "keyword" // 精确匹配
},
"age": {
"type": "integer" // 数字
},
"price": {
"type": "scaled_float", // 金额
"scaling_factor": 100
},
"createdAt": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"isActive": {
"type": "boolean"
},
"ip": {
"type": "ip"
},
"location": {
"type": "geo_point"
},
"address": { // 对象类型
"properties": {
"province": {
"type": "keyword"
},
"city": {
"type": "keyword"
}
}
},
"tags": {
"type": "keyword" // 数组(多标签)
},
"suggest": {
"type": "completion" // 自动补全
}
}
}
}
十一、常用分词器
| 分词器 | 说明 |
|---|---|
standard |
默认,按单词边界切分(英文友好,中文按字切) |
ik_max_word |
IK 中文,细粒度分词(索引时用,召回率高) |
ik_smart |
IK 中文,粗粒度分词(搜索时用,精度高) |
whitespace |
按空格切分 |
simple |
按非字母字符切分,转小写 |
keyword |
不分词,整体作为一个词项(等价于 keyword 类型) |
十二、选择建议
| 场景 | 推荐类型 |
|---|---|
| 需要分词全文搜索 | text |
| 精确匹配 / 排序 / 聚合 | keyword |
通配符模糊搜索(*) |
wildcard |
| 日期时间 | date |
| 数值范围 | 最小满足的 integer / long |
| 经纬度 | geo_point |
| 嵌套数组对象 | nested |
| 自动补全 | completion |