您现在的位置是:首页 > 博客日记 > Search搜索 Search搜索

ES常用的数据类型可分为3大类

2020-10-14 15:53:42 【Search搜索】 人已围观

ES常用的数据类型可分为3大类

  • 核⼼数据类型
  • 复杂数据类型
  • 专⽤数据类型

核心数据类型
(1)字符串

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

(2)数值型

  1. 整型: byteshortintegerlong
  2. 浮点型: float, half_float, scaled_floatdouble

(3)日期类型

  1. date

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

  1. #mapping,将字段类型设置为date
  2. "type" : "date"
  3. #插入|更新此字段的值时,有3种表示方式
  4. #使用固定格式的字符串
  5. "2020-04-18""2020/04/18 09:00:00"
  6. #值使用长整型的时间戳,1970-01-01 00:00:00,s
  7. 1610350870
  8. #值使用长整型的时间戳,ms
  9. 1641886870000

(4)范围型

  1. integer_range long_range float_rangedouble_rangedate_range

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

  1. age_limit :{
  2.  "type" : "integer_range"
  3. }

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

  1. "age_limit" : {
  2.  "gte" : 20,
  3.  "lte" : 40
  4. }

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

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

  1. "term" : {
  2.  "age_limit" : 30
  3. }
  4. age_limit的区间包含了此值的文档都算是匹配。

(5)布尔

  1. boolean #true、false

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

复杂数据类型

(1)对象

  1. object
  1. #定义mapping
  2. "user" : {
  3. "type":"object"
  4. }
  5. #插入|更新字段的值,值写成json对象的形式
  6. "user" : {
  7. "name":"chy",
  8. "age":12
  9. }
  10. #搜索时,字段名使用点号连接
  11. "match":{
  12. "user.name":"chy"
  13. }

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

(2)数组

  1. #ES没有专门的数组类型,定义mapping,写成元素的类型
  2. "arr" : {
  3. "type":"integer"
  4. }
  5. #插入|更新字段的值。元素可以是各种类型,但元素的类型要相同
  6. "arr" : [1,3,4]

专用数据类型

  1. ip
  1. #定义mapping
  2. "ip_address" : {
  3. "type":"ip"
  4. }
  5. #插入|更新字段的值,值写成字符串形式
  6. "ip" : "192.168.1.1"
  7. #搜索
  8. "match":{
  9. "ip_address":"192.168.1.1"
  10. }
  11. #ip在192.168.0.0 ~ 192.168.255.255上的文档都匹配
  12. "match":{
  13. "ip_address":"192.168.0.0/16"
  14. }


关注TinyMeng博客,更多精彩分享,敬请期待!
 

很赞哦! ()