在 Elasticsearch 中,索引字段的类型是通过 Mapping 定义的,这决定了数据如何被存储和查询。除了常见的 text
和 date
类型,还有许多其他类型可以满足不同的数据需求。
以下是 Elasticsearch 中支持的字段类型分类和详细说明:
1. 全文搜索类型
用于处理需要分词的文本数据。
text
- 功能:
- 用于全文搜索。
- 支持分词和分析器。
- 场景:
- 存储需要搜索的文章、评论等。
示例
2. 精确值类型
用于存储不需要分词的精确数据。
keyword
- 功能:
- 用于精确匹配。
- 支持排序、聚合。
- 场景:
- 存储标识符、标签、状态值等。
示例
3. 数值类型
用于存储数值数据。
类型 | 描述 | 场景 |
---|---|---|
integer | 32 位整数 | 存储用户年龄、ID 等 |
long | 64 位整数 | 存储时间戳、计数等 |
short | 16 位整数 | 存储较小的整数范围数据 |
byte | 8 位整数 | 存储小范围整数(如状态) |
double | 64 位双精度浮点数 | 存储价格、精确计算值等 |
float | 32 位单精度浮点数 | 存储评分、距离等 |
half_float | 16 位半精度浮点数 | 存储不精确的浮点数 |
scaled_float | 浮点数,支持缩放因子(小数转整数) | 存储货币值等 |
示例
4. 日期和时间类型
date
- 功能:
- 存储日期和时间。
- 支持多种格式(默认 ISO 8601)。
- 场景:
- 存储创建时间、更新时间等。
示例
date_nanos
- 功能:
- 高精度日期类型(支持纳秒)。
- 场景:
- 存储需要精确到纳秒的时间戳。
5. 布尔类型
boolean
- 功能:
- 存储
true
或false
值。
- 存储
- 场景:
- 存储开关状态、标志位等。
示例
6. 范围类型
用于表示值的范围。
类型 | 描述 | 场景 |
---|---|---|
integer_range | 整数范围 | 存储年龄范围等 |
float_range | 浮点数范围 | 存储评分范围等 |
long_range | 64 位整数范围 | 存储 ID 范围 |
double_range | 双精度浮点数范围 | 存储价格范围 |
date_range | 日期范围 | 存储时间范围 |
示例
7. 地理类型
geo_point
- 功能:
- 存储地理点(经度和纬度)。
- 场景:
- 存储 GPS 坐标、地理位置。
示例
geo_shape
- 功能:
- 存储复杂地理形状(如多边形、线)。
- 场景:
- 存储区域范围、路线数据。
示例
8. IP 地址类型
ip
- 功能:
- 存储 IPv4 或 IPv6 地址。
- 场景:
- 存储访问日志中的客户端 IP。
示例
9. 特殊类型
completion
- 功能:
- 用于自动完成和建议功能。
- 场景:
- 实现搜索建议(Search Suggest)。
示例
token_count
- 功能:
- 计算文本的分词数量。
- 场景:
- 存储分词结果数量,用于文本分析。
示例
10. 对象类型
object
- 功能:
- 存储嵌套的 JSON 对象(扁平化存储)。
- 场景:
- 存储简单的嵌套数据结构。
示例
nested
- 功能:
- 存储嵌套的 JSON 对象(单独存储,支持独立查询)。
- 场景:
- 存储复杂的嵌套数据,需独立查询子对象。
示例
11. 二进制类型
binary
- 功能:
- 存储二进制数据(Base64 编码)。
- 场景:
- 存储文件、图片、加密数据等。
示例
总结
类型类别 | 字段类型 |
---|---|
全文搜索类型 | 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 提供了丰富的字段类型,能够支持多种复杂数据存储和查询需求。根据具体的使用场景选择适合的字段类型,以优化存储和检索性能