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