ES支持的数据类型

本文深入解析ElasticSearch支持的各种数据类型,包括字符串、整数、浮点数、逻辑、日期、范围、二进制、复合、数组、对象、嵌套、地理坐标、地理地图、IP、范围、令牌计数及附件类型,详细介绍每种类型的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES支持的数据类型:
字符串类型 :

string:
text:
keyword:
从ElasticSearch 5.x开始不再支持string,由text和keyword类型替代;当一个字段是要被全文搜索的,设置text类型,字段内容会被分析,text类型的字段不用于排序,很少用于聚合;keyword类型的字段只能通过精确值搜索到,如果字段需要进行过滤、排序、聚合,设置keyword类型。

整数类型:

long
integer
short
byte
在满足需求的情况下,尽可能选择范围小的数据类型,字段的长度越短,索引和搜索的效率越高。

浮点类型

double:64位双精度IEEE 754浮点类型
float:32位单精度IEEE 754浮点类型
half_float:16位半精度IEEE 754浮点类型
scaled_float : 缩放类型的的浮点数
对于float、half_float和scaled_float,-0.0和+0.0是不同的值,使用term查询查找-0.0不会匹配+0.0,同样range查询中上边界是-0.0不会匹配+0.0,下边界是+0.0不会匹配-0.0。其中scaled_float,比如价格只需要精确到分,price为57.34的字段缩放因子为100,存起来就是5734 优先考虑使用带缩放因子的scaled_float浮点类型。

逻辑类型 :boolean

日期类型 :date

日期类型表示格式可以是以下几种:

日期格式的字符串,比如 “2018-01-13” 或 “2018-01-13 12:10:30”
long类型的毫秒数( milliseconds-since-the-epoch,epoch就是指UNIX诞生的UTC时间1970年1月1日0时0分0秒)
integer的秒数(seconds-since-the-epoch)
范围类型 :range

二进制类型 :binary

二进制字段是指用base64来表示索引中存储的二进制数据,可用来存储二进制形式的数据,例如图像。默认情况下,该类型的字段只存储不索引。二进制类型只支持index_name属性。

复合类型

数组类型 array
对象类型 object :JSON格式对象数据
嵌套类型 nested
地理类型 地理坐标类型 geo_point
地理地图 geo_shape
特殊类型 IP类型 ip
范围类型 completion
令牌计数类型 token_count
附件类型 attachment
抽取类型 percolator
在ElasticSearch中,数组是开箱即用的,不需要进行任何配置,就可以直接使用,没有专门的数组(Array)数据类型,默认情况下,任意一个字段都可以包含0或多个值。在同一个数组中,数组元素的数据类型是相同的,ElasticSearch不支持元素为多个数据类型。

### Elasticsearch 复杂数据类型及其应用 #### 1. 嵌套对象 (Nested Objects) 嵌套对象允许存储复杂的层次结构,其中每个子文档都可以独立查询。这非常适合处理具有多层关系的数据。 ```json PUT /my-index/_doc/1 { "group": "fans", "user": [ { "first": "John", "last": "Smith" }, { "first": "Alice", "last": "White" } ] } ``` 为了有效利用嵌套字段,在映射定义时需指定 `nested` 类型: ```json PUT my-index-000001 { "mappings": { "properties": { "user": { "type": "nested", "properties": { "first": { "type": "text" }, "last": { "type": "keyword"} } } } } } ``` 这种设计使得可以针对单个用户的属性执行精确匹配操作[^1]。 #### 2. 对象数组 (Arrays of Objects) 当不需要单独索引内部对象时,可采用简单对象数组形式。此方式适用于表示列表或集合类信息。 ```json POST my-index/_doc/ { "tags":["red","blue"], "locations":[ {"lat":40,"lon":-70},{"lat":50,"lon":-60}] } ``` 注意这种方式下无法实现对单个元素的精准检索,因为所有条目会被视为单一实体的一部分。 #### 3. 地理位置 (Geo Data Types) 支持地理坐标点(`geo_point`) 和形状 (`geo_shape`) 的特殊类型用于空间数据分析场景。 ```json PUT geo-index { "mappings": { "properties": { "location": { "type": "geo_point" } } } } POST geo-index/_doc/1 { "name":"Central Park", "location":{ "lat":40.785, "lon":-73.965 } } ``` 地理位置类型特别适合于地图可视化以及基于距离范围内的搜索需求。 #### 4. 特殊用途类型 还包括其他一些特定功能的数据类型如日期时间戳、IP地址等,这些都极大扩展了Elasticsearch的应用边界。 通过上述介绍可以看出,合理运用不同种类的数据模型能够更好地满足多样化的业务逻辑要求,并提高系统的整体性能表现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值