常用数据类型可以分为3大类

  • 核心数据类型
  • 复杂数据类型
  • 专用数据类型

核心数据类型

1、字符串

  • text类型:用于全文索引,搜索时会自动使用分词器进行分词再匹配
  • keyword类型:部分此,搜索时需要匹配完整的值

    2、数值型

  • 整形:byte,short,integer,long

  • 浮点型:float,half_float,scaled_float,double

    3、日期类型

  • 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、范围类型

integer_range,long_range,float_range,double_range,date_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. }

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

5、布尔

  • boolean

    6、二进制

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


    复杂数据类型

    1、对象

    object ```bash

    定义mapping

    “user” : { “type”:”object” }

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

“user” : { “name”:”chy”, “age”:12 }

搜索时,字段名使用点号连接

“match”:{ “user.name”:”chy” }

  1. <a name="ietSd"></a>
  2. ## 2、数组
  3. ```bash
  4. #ES没有专门的数组类型,定义mapping,写成元素的类型
  5. "arr" : {
  6. "type":"integer"
  7. }
  8. #插入|更新字段的值。元素可以是各种类型,但元素的类型要相同
  9. "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. }