ElasticSearch 常用字段类型

本文深入解析Elasticsearch中各类数据类型的使用场景与定义方式,包括核心数据类型如字符串、数值型、日期等,复杂数据类型如对象和数组,以及专用数据类型如ip地址。详细介绍了每种类型在插入、更新及搜索时的具体应用。

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

 

ES常用的数据类型可分为3大类
  • 核⼼数据类型
  • 复杂数据类型
  • 专⽤数据类型

 

 

核心数据类型

(1)字符串
  • text  ⽤于全⽂索引,搜索时会自动使用分词器进⾏分词再匹配
  • keyword  不分词,搜索时需要匹配完整的值

 

 

(2)数值型
  • 整型: byte,short,integer,long
  • 浮点型: float, half_float, scaled_float,double

 

 

(3)日期类型
  • date

json没有date类型,插入|更新文档|字段时怎么表示date类型?

#mapping,将字段类型设置为date
"type" : "date" 


#插入|更新此字段的值时,有3种表示方式

#使用固定格式的字符串
"2020-04-18""2020/04/18 09:00:00"   

#值使用长整型的时间戳,1970-01-01 00:00:00,s
1610350870    

#值使用长整型的时间戳,ms
1641886870000

 

 

(4)范围型

integer_range, long_range, float_range,double_range,date_range

比如招聘要求年龄在[20, 40]上,mapping:

age_limit :{
 "type" : "integer_range"
}

 

插入|更新文档|字段时,值写成json对象的形式:

"age_limit" : {
 "gte" : 20,
 "lte" : 40
}

gt是大于,lt是小于,e是equals等于。

 

按此字段搜索时,值写常量:

"term" : {
 "age_limit" : 30
}

age_limit的区间包含了此值的文档都算是匹配。

 

 

(5)布尔
  • boolean     #true、false

 

 

(6)⼆进制
  • binary   会把值当做经过 base64 编码的字符串,默认不存储,且不可搜索

 

 

 

复杂数据类型

(1)对象
  • object
#定义mapping
"user" : {
    "type":"object"
}


#插入|更新字段的值,值写成json对象的形式
"user" : {
    "name":"chy",
    "age":12
}


#搜索时,字段名使用点号连接
"match":{
     "user.name":"chy"
 }

一个对象中可以嵌套对象。

 

 

(2)数组
#ES没有专门的数组类型,定义mapping,写成元素的类型
"arr" : {
    "type":"integer"
}


#插入|更新字段的值。元素可以是各种类型,但元素的类型要相同
"arr" : [1,3,4]

 

 

 

 

专用数据类型

  • ip
#定义mapping
"ip_address" : {
    "type":"ip"
}


#插入|更新字段的值,值写成字符串形式
"ip" : "192.168.1.1"


#搜索
"match":{
     "ip_address":"192.168.1.1"
 }


#ip在192.168.0.0 ~ 192.168.255.255上的文档都匹配
"match":{
     "ip_address":"192.168.0.0/16"
 }

 

### Elasticsearch 常用属性列表及说明 在 Elasticsearch 中,配置索引和字时会涉及到许多常用的属性。这些属性决定了字的行为、存储方式以及查询效率。以下是 Elasticsearch 中一些重要的常用属性及其功能描述。 #### 1. 数据类型 (`type`) 数据类型定义了字能够存储的数据种类。常见的数据类型包括但不限于以下几种[^1]: - **`text`**: 可分词的文本字,适合全文搜索。 - **`keyword`**: 不可分词的精确值字,适用于聚合、排序或作为关键字使用。 - **数值型**: - `long`, `integer`, `short`, `byte`: 整数类型的子集。 - `double`, `float`: 浮点数类型的子集。 - **`boolean`**: 表示布尔值(真/假)。 - **`date`**: 存储日期时间信息。 - **`object`**: 复杂对象类型,允许嵌套其他字。 #### 2. 是否创建索引 (`index`) 该属性决定字是否被加入倒排索引中以便于后续检索操作。可能的选项有[^2]: - **`true` (默认)**: 创建索引并使其可用于搜索。 - **`false`**: 禁止对该字建立索引,意味着它不会出现在任何查询结果之中,但仍能通过 `_source` 获取原始内容。 #### 3. 分析器 (`analyzer`) 指定用于处理字符串字的分词机制。不同的分析策略会影响最终存入数据库的形式以及未来执行查询时的表现形式[^1][^2]: - **未设置**: 默认采用 Standard Analyzer 自动解析英文单词等内容。 - **自定义值**: 用户可以根据实际需求挑选合适的预置方案或者自行开发新的实现版本。 例如,在中文环境下经常使用的 IKAnalyzer 就是一种专门针对汉语特点定制而成的有效工具之一。 #### 4. 忽略缺失项 (`ignore_above`) 对于 keyword 类型来说特别有用的一个参数——当遇到长度超过设定阈值的大字符串时自动忽略它们而不将其纳入考虑范围之内。这有助于减少不必要的内存消耗同时提高整体运行速度。 #### 5. 格式化规则 (`format`) 主要用于 date 类别的变量声明具体的时间戳样式是什么样的样子。比如 ISO8601 或者 epoch_millis 都是非常普遍的选择。 #### 6. 向量空间模型支持(`fielddata`) 虽然 text 类型本身并不直接参与统计计算等活动项目当中去,但是开启 fielddata 功能之后就可以让其具备这样的能力了(代价是比较高的磁盘占用率). --- ### 示例代码片展示如何应用上述部分概念 ```json PUT my_index { "mappings": { "properties": { "name": { "type": "text", "analyzer": "ik_max_word" }, "age": { "type": "integer" }, "created_at":{ "type":"date", "format":"yyyy-MM-dd HH:mm:ss||epoch_millis" } } } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值