常用字段类型

#es

总结
  • text 会分词,用于全文搜索;keyword 不分词,用于精确匹配
  • 数值类型按实际范围选,别无脑用 long
  • date 存毫秒数或格式化字符串都行

1. 字符串类型

这是最常用的,也是最容易搞混的,详细使用见 搜索的简单使用

类型 是否分词 适用场景
text 文章内容、商品描述等需要全文搜索的字段
keyword 状态、标签、ID 等需要精确匹配/排序/聚合的字段

一个字段如果既要全文搜索又要精确匹配,可以同时设置两种类型(multi-fields):

"name": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword"
    }
  }
}

2. 数值类型

按实际数据范围选,不要无脑用 long,占空间也影响性能:

类型 范围
byte -128 ~ 127
short -32768 ~ 32767
integer -2^31 ~ 2^31-1
long -2^63 ~ 2^63-1
float 单精度浮点
double 双精度浮点
half_float 16位浮点,精度低但省空间
scaled_float 按比例缩放的浮点,如价格用 scaling_factor: 100

3. 其他常用类型

布尔boolean,存 true / false

日期date,支持毫秒时间戳或格式化字符串,查询时统一转成 UTC 毫秒数处理

二进制binary,存 base64 编码字符串,默认不存储、不可搜索,一般不用

4. 范围类型

适合存"区间"数据,比如年龄段、价格区间:

类型 说明
integer_range 整数范围
float_range 浮点范围
double_range 双精度浮点范围
long_range 长整型范围
date_range 日期范围

存储示例(age 字段是 integer_range):

{
  "age": { "gte": 20, "lte": 40 }
}

查询时用 term 查询。

5. 复杂类型

6. 专用类型