在 Elasticsearch 中,索引字段的类型是通过 Mapping 定义的,这决定了数据如何被存储和查询。除了常见的 textdate 类型,还有许多其他类型可以满足不同的数据需求。

以下是 Elasticsearch 中支持的字段类型分类和详细说明:


1. 全文搜索类型

用于处理需要分词的文本数据。

text

  • 功能
    • 用于全文搜索。
    • 支持分词和分析器。
  • 场景
    • 存储需要搜索的文章、评论等。

示例

json
"title": { "type": "text", "analyzer": "standard" }

2. 精确值类型

用于存储不需要分词的精确数据。

keyword

  • 功能
    • 用于精确匹配。
    • 支持排序、聚合。
  • 场景
    • 存储标识符、标签、状态值等。

示例

json
"status": { "type": "keyword" }

3. 数值类型

用于存储数值数据。

类型描述场景
integer32 位整数存储用户年龄、ID 等
long64 位整数存储时间戳、计数等
short16 位整数存储较小的整数范围数据
byte8 位整数存储小范围整数(如状态)
double64 位双精度浮点数存储价格、精确计算值等
float32 位单精度浮点数存储评分、距离等
half_float16 位半精度浮点数存储不精确的浮点数
scaled_float浮点数,支持缩放因子(小数转整数)存储货币值等

示例

json
"price": { "type": "scaled_float", "scaling_factor": 100 }

4. 日期和时间类型

date

  • 功能
    • 存储日期和时间。
    • 支持多种格式(默认 ISO 8601)。
  • 场景
    • 存储创建时间、更新时间等。

示例

json
"created_at": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" }

date_nanos

  • 功能
    • 高精度日期类型(支持纳秒)。
  • 场景
    • 存储需要精确到纳秒的时间戳。

5. 布尔类型

boolean

  • 功能
    • 存储 truefalse 值。
  • 场景
    • 存储开关状态、标志位等。

示例

json
"is_active": { "type": "boolean" }

6. 范围类型

用于表示值的范围。

类型描述场景
integer_range整数范围存储年龄范围等
float_range浮点数范围存储评分范围等
long_range64 位整数范围存储 ID 范围
double_range双精度浮点数范围存储价格范围
date_range日期范围存储时间范围

示例

json
"valid_date": { "type": "date_range" }

7. 地理类型

geo_point

  • 功能
    • 存储地理点(经度和纬度)。
  • 场景
    • 存储 GPS 坐标、地理位置。

示例

json
"location": { "type": "geo_point" }

geo_shape

  • 功能
    • 存储复杂地理形状(如多边形、线)。
  • 场景
    • 存储区域范围、路线数据。

示例

json
"area": { "type": "geo_shape" }

8. IP 地址类型

ip

  • 功能
    • 存储 IPv4 或 IPv6 地址。
  • 场景
    • 存储访问日志中的客户端 IP。

示例

json
"client_ip": { "type": "ip" }

9. 特殊类型

completion

  • 功能
    • 用于自动完成和建议功能。
  • 场景
    • 实现搜索建议(Search Suggest)。

示例

json
"suggest": { "type": "completion" }

token_count

  • 功能
    • 计算文本的分词数量。
  • 场景
    • 存储分词结果数量,用于文本分析。

示例

json
"description_length": { "type": "token_count", "analyzer": "standard" }

10. 对象类型

object

  • 功能
    • 存储嵌套的 JSON 对象(扁平化存储)。
  • 场景
    • 存储简单的嵌套数据结构。

示例

json
"author": { "type": "object", "properties": { "name": { "type": "text" }, "age": { "type": "integer" } } }

nested

  • 功能
    • 存储嵌套的 JSON 对象(单独存储,支持独立查询)。
  • 场景
    • 存储复杂的嵌套数据,需独立查询子对象。

示例

json
"comments": { "type": "nested", "properties": { "user": { "type": "keyword" }, "message": { "type": "text" } } }

11. 二进制类型

binary

  • 功能
    • 存储二进制数据(Base64 编码)。
  • 场景
    • 存储文件、图片、加密数据等。

示例

json
"file_data": { "type": "binary" }

总结

类型类别字段类型
全文搜索类型text
精确值类型keyword
数值类型integer, long, short, byte, double, float, half_float, scaled_float
日期类型date, date_nanos
布尔类型boolean
范围类型integer_range, float_range, long_range, double_range, date_range
地理类型geo_point, geo_shape
IP 类型ip
特殊类型completion, token_count
对象类型object, nested
二进制类型binary

Elasticsearch 提供了丰富的字段类型,能够支持多种复杂数据存储和查询需求。根据具体的使用场景选择适合的字段类型,以优化存储和检索性能

点赞(365) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部