Elasticsearch 中字段类型繁多,合理选择字段类型对索引效率、查询性能和存储空间都有重要影响。以下是常用字段类型的全面介绍及区别解析,结合核心、复合、地理和特殊类型,帮助你理解它们的作用和应用场景。
1. 核心数据类型
类型 |
说明 |
适用场景与特点 |
text |
用于全文检索的字符串字段,会经过分词器拆分成词项并建立倒排索引。 |
适合长文本、描述、文章内容等需要模糊匹配、分词查询的场景。不支持排序和精确聚合。 |
keyword |
不分词的字符串字段,整体作为一个词项索引。 |
适合存储结构化短文本,如用户名、邮箱、标签、状态码等。支持精确匹配、过滤、排序和聚合。 |
long |
64位整数 |
存储时间戳、ID、计数等大范围整数。支持范围查询、排序、聚合。 |
integer |
32位整数 |
存储较小范围的整数,如数量、等级等。支持范围查询、排序、聚合。 |
float/double |
单精度/双精度浮点数 |
存储金额、权重、评分等带小数的数值。支持范围查询、排序、聚合。 |
boolean |
布尔值,true 或 false |
存储二元状态,如开关、是否激活等。支持过滤和聚合。 |
date |
日期时间类型 |
存储日期时间,支持多种格式。方便时间范围查询、排序和时间聚合。 |
binary |
二进制数据,不支持检索和聚合 |
存储图片、文件等二进制内容,主要用于存储,不用于搜索。 |
2. 复合数据类型
类型 |
说明 |
适用场景与特点 |
object |
JSON 对象,包含多个字段 |
存储结构化数据,字段之间无独立索引,数组中对象匹配可能出现跨对象匹配问题。 |
nested |
嵌套对象数组,每个对象独立索引 |
解决数组中对象字段交叉匹配问题,适合复杂数组结构,支持嵌套查询。 |
array |
Elasticsearch 不单独定义数组类型,字段可直接存储数组值 |
支持存储同类型多个值,数组中元素类型由字段类型决定。 |
3. 地理空间类型
类型 |
说明 |
适用场景与特点 |
geo_point |
经纬度坐标点 |
存储地理位置点,支持基于距离的查询和排序。 |
geo_shape |
复杂地理形状,如多边形、线等 |
适合存储区域边界、路径等复杂地理信息,支持空间关系查询。 |
4. 特殊类型
类型 |
说明 |
适用场景与特点 |
ip |
IPv4 或 IPv6 地址 |
存储IP地址,支持范围查询。 |
completion |
自动补全建议字段 |
用于实现搜索自动补全功能。 |
token_count |
统计字符串中词条数量 |
用于分析文本长度或复杂度。 |
murmur3 |
哈希值字段 |
用于快速哈希计算和索引。 |
percolator |
存储查询以便反向匹配文档 |
实现基于查询的索引反向匹配。 |
5. 字符串类型的区别详解
类型 |
分词情况 |
支持排序/聚合 |
适用查询类型 |
典型用途 |
text |
分词 |
不支持排序 |
match、全文检索、模糊查询 |
文章内容、评论、描述等长文本 |
keyword |
不分词 |
支持排序/聚合 |
term、精确匹配、过滤 |
用户名、标签、状态、ID等 |
Elasticsearch 5.x 以后,string
类型被拆分为 text
和 keyword
,分别满足全文检索和精确匹配需求[2][3][5]。
6. 数值类型的选择
根据数值大小和精度选择合适类型:
类型 |
说明 |
典型范围/用途 |
byte |
8位整数 |
-128 到 127 |
short |
16位整数 |
-32,768 到 32,767 |
integer |
32位整数 |
-2^31 到 2^31-1 |
long |
64位整数 |
大整数,如时间戳、ID |
float |
单精度浮点数 |
金额、评分等带小数数据 |
double |
双精度浮点数 |
高精度小数 |
scaled_float |
通过缩放因子存储浮点数 |
节省存储空间,适合定点数存储 |
总结
- 全文检索用
text
,结构化精确匹配用 keyword
。
- 数值类型根据范围和精度选择,保证存储和查询效率。
- 日期类型专门处理时间,支持多种格式和时间操作。
- 复杂结构用
object
或 nested
,后者支持嵌套查询,避免字段跨对象匹配错误。
- 地理数据和特殊需求有专门类型支持,满足多样化业务场景。
合理选择字段类型,是 Elasticsearch 索引设计的关键,直接影响查询性能和存储效率[1][2][3][4][5]。
[1] https://cloud.tencent.com/developer/article/2357713
[2] https://xiaoxiami.gitbook.io/elasticsearch/ji-chu/mapping/zi-duan-de-shu-ju-lei-xing
[3] https://www.cnblogs.com/tanghaorong/p/16323253.html
[4] https://cloud.tencent.com/developer/article/2260312
[5] https://developer.aliyun.com/article/969878
[6] https://blog.csdn.net/aben_sky/article/details/121515175
[7] https://www.cnblogs.com/shoufeng/p/10692113.html
[8] https://blog.csdn.net/ZYC88888/article/details/83059040
[9] https://developer.aliyun.com/article/707773