Elasticsearch索引字段的类型

在 Elasticsearch 中,索引字段的类型(即 Mapping 中的字段类型)对搜索和存储性能影响很大。下面是各种常用数据类型的用途及推荐使用场景总结:


1. keyword 类型(精确匹配

  • 适合数据

    • 不需要分词,直接用于过滤、排序、聚合等操作的数据。
  • 常见字段

    • 用户 ID、手机号、身份证、订单号、状态码、城市名称、标签、分类名、性别、IP、UUID 等。
  • 说明

    • keyword 是不可被分词的,整体作为一个字符串处理,支持 term 查询、terms 查询、terms aggregation 聚合等。

例子

"user_id": { "type": "keyword" }
"status": { "type": "keyword" }

2. text 类型(分词全文检索

  • 适合数据

    • 需要做全文搜索(模糊搜索、关键词搜索)的字段。
  • 常见字段

    • 评论内容、商品标题、文章内容、日志描述等。
  • 说明

    • 默认会使用 analyzer 分词器进行分词处理,适合搜索但不适合做聚合或排序。

🔸 例子

"title": { "type": "text" }
"comment": { "type": "text" }

组合用法text + keyword(一个字段两个视图)

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

这样 username 可以分词搜索,也可以用 username.keyword 精确匹配、排序、聚合。


3. integer / long / float / double

  • 适合数据

    • 数值类型字段,如金额、数量、分数、时间戳等。
  • 常见字段

    • 年龄、价格、库存、评分、时间戳(可用 long 表示)、纬度经度等。
  • 建议选择

    • integer:32位整数,适合一般数值;
    • long:64位整数,如毫秒时间戳;
    • float / double:浮点类型,有精度要求时用 double

🔸 例子

"price": { "type": "double" }
"timestamp": { "type": "long" }

4. date

  • 适合数据

    • 任何格式化的日期时间,比如创建时间、更新时间、登录时间等。
  • 常见字段

    • createTime, updateTime, logTime
  • 说明

    • 支持范围查询和时间聚合;
    • 可以通过 format 指定日期格式。

🔸 例子

"create_time": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss||epoch_millis" }

5. boolean

  • 适合数据

    • true/false 类型,如是否删除、是否启用等。

🔸 例子

"is_deleted": { "type": "boolean" }

6. nested

  • 适合数据

    • 对象数组结构,需要对数组中每个对象进行独立查询时使用。

🔸 例子(用户有多个订单):

"orders": {
  "type": "nested",
  "properties": {
    "order_id": { "type": "keyword" },
    "amount": { "type": "double" }
  }
}

7. object

  • 适合数据

    • 简单对象结构(非数组),如 address。

🔸 例子

"address": {
  "type": "object",
  "properties": {
    "province": { "type": "keyword" },
    "city": { "type": "keyword" }
  }
}

不推荐的数据类型(谨慎使用)

类型说明
text 做聚合或排序会报错,需要用 keyword
大文本字段text,并避免在 UI 上分页返回
非结构化 JSON不推荐嵌套太深的结构体,会影响性能

总结推荐表

数据类型推荐映射类型用途
用户名text + keyword模糊搜索 + 精准聚合
状态码keyword精确过滤
评论内容text分词搜索
创建时间date时间范围查询
价格/分数double数值计算
是否删除标识boolean布尔条件
时间戳long毫秒时间
地址结构体object结构化字段
对象数组(如订单)nested嵌套多值数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值