编程笔记

lifelong learning & practice makes perfect

ES|常用字段类型

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 类型被拆分为 textkeyword,分别满足全文检索和精确匹配需求[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
  • 数值类型根据范围和精度选择,保证存储和查询效率
  • 日期类型专门处理时间,支持多种格式和时间操作
  • 复杂结构用 objectnested,后者支持嵌套查询,避免字段跨对象匹配错误
  • 地理数据和特殊需求有专门类型支持,满足多样化业务场景

合理选择字段类型,是 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

欢迎关注我的其它发布渠道