ElasticSearch 搜索引擎入门到实战 8--常⻅的字段类型

数据类型

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

核⼼数据类型

  • 字符串
    • text:⽤于全⽂索引,该类型的字段将通过分词器进⾏分词
    • keyword:不分词,只能搜索该字段的完整的值
  • 数值型
    • 整数类型 long, integer, short, byte,
    • 浮点类型 double, float, half_float, scaled_float
  • 布尔 - boolean
  • ⼆进制 - binary:该类型的字段把值当做经过 base64 编码的字符串,默认不存储,且不可搜索
  • 范围类型
    • 范围类型表示值是⼀个范围,⽽不是⼀个具体的值
    • integer_range, float_range, long_range, double_range, date_range
    • 譬如 age 的类型是 integer_range,那么值可以是 {“gte” : 20, “lte” : 40};搜索 “term” :{“age”: 21} 可以搜索该值
  • ⽇期 - date
    • 由于Json没有date类型,所以es通过识别字符串是否符合format定义的格式来判断是否为date类型format默认为:strict_date_optional_time||epoch_millis
    • 格式:“2022-01-01” “2022/01/01 12:10:30” 这种字符串格式,从开始纪元(1970年1⽉1⽇0点) 开始的毫秒数,从开始纪元开始的秒数

核心数据类型示例

//设置索引的映射
PUT /nba/_mapping
{
  "properties": {
    "name": {
      "type": "text"
    },
    "team_name": {
      "type": "text"
    },
    "position": {
      "type": "text"
    },
    "play_year": {
      "type": "long"
    },
    "jerse_no": {
      "type": "keyword"
    },
    "title": {
      "type": "text"
    },
    "date": {
      "type": "date"
    }
  }
}

//添加记录
POST /nba/_doc/4
{
  "name": "蔡坤",
  "team_name": "勇⼠",
  "position": "得分后卫",
  "play_year": 10,
  "jerse_no": "31",
  "title": "打球最帅的明星",
  "date": "2020-01-01"
}

//添加记录
POST /nba/_doc/5
{
  "name": "杨超越",
  "team_name": "猴急",
  "position": "得分后卫",
  "play_year": 10,
  "jerse_no": "32",
  "title": "打球最可爱的明星",
  "date": 1610350870
}

//添加记录
POST /nba/_doc/6
{
  "name": "吴城市",
  "team_name": "湖⼈",
  "position": "得分后卫",
  "play_year": 10,
  "jerse_no": "33",
  "title": "最会说唱的明星",
  "date": 1641886870000
}


复杂数据类型

  • 数组类型 Array
    • ES中没有专⻔的数组类型, 直接使⽤[]定义即可,数组中所有的值必须是同⼀种数据类型, 不⽀持混合数据类型的数组:
    • 字符串数组 [ “one”, “two” ]
    • 整数数组 [ 1, 2 ]
  • Object对象数组
    • [ { “name”: “Louis”, “age”: 18 }, { “name”: “Daniel”, “age”: 17 }]
    • 同⼀个数组只能存同类型的数据,不能混存,譬如 [ 10, “some string” ] 是错误的
  • 对象类型 Object
    • 对象类型可能有内部对象

复杂数据类型-示例

//添加文档
POST /nba/_doc/8
{
  "name": "吴城市",
  "team_name": "湖⼈",
  "position": "得分后卫",
  "play_year": 10,
  "jerse_no": "33",
  "title": "最会说唱的明星",
  "date": "1641886870",
  "array": [
    "one",
    "two"
  ],
  "address": {
    "region": "China",
    "location": {
      "province": "GuangDong",
      "city": "GuangZhou"
    }
  }
}

//索引方式
"address.region": "China",
"address.location.province": "GuangDong",
"address.location.city": "GuangZhou"

//查询
POST /nba/_search
{
  "query": {
    "match": {
      "address.region": "china"
    }
  }
}

专用数据类型

  • IP类型
    • IP类型的字段⽤于存储IPv4或IPv6的地址, 本质上是⼀个⻓整型字段

测试示例

//设置索引的映射
POST /nba/_mapping
{
  "properties": {
    "name": {
      "type": "text"
    },
    "team_name": {
      "type": "text"
    },
    "position": {
      "type": "text"
    },
    "play_year": {
      "type": "long"
    },
    "jerse_no": {
      "type": "keyword"
    },
    "title": {
      "type": "text"
    },
    "date": {
      "type": "date"
    },
    "ip_addr": {
      "type": "ip"
    }
  }
}

//添加文档
PUT /nba/_doc/9
{
  "name": "吴亦凡",
  "team_name": "湖⼈",
  "position": "得分后卫",
  "play_year": 10,
  "jerse_no": "33",
  "title": "最会说唱的明星",
  "ip_addr": "192.168.1.1"
}

//查询文档
POST /nba/_search
{
  "query": {
    "term": {
      "ip_addr": "192.168.0.0/16"
      //192.168 .0 .0~192.168 .255 .255
    }
  }
}

更多数据类型,查阅官方文档
Field data types | Elasticsearch Guide [8.1] | Elastic

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值