一级分类 二级分类 具体类型
基础类型 字符串类型 text, keyword
整数类型 integer, long, short, byte
浮点类型 double, float, half_float, scaled_float
逻辑类型 boolean
日期类型 date
范围类型 range
二进制类型 binary
复合类型 数组类型 array
对象类型 object
嵌套类型 nested
特殊类型 坐标类型 geo_point
IP类型 ip
范围类型 completion
令牌计数类型 token_count
附件类型 attachment
抽取类型 percolator

基础类型

text类型

text取代了string,当一个字段需要全文搜索的时候,比如邮件内容,产品描述,应该使用text类型。
设置text类型后,字段内容会被分析,生成倒排索引以前,字符串会被分析器分成单个词项。
text类型字段不用于排序,很少用于聚合(termsAggregation)除外。

  1. PUT /my_index
  2. {
  3. "mappings":{
  4. "properties":{
  5. "full_name": {
  6. "type":"text"
  7. }
  8. }
  9. }
  10. }

keyword类型

keyword类型适用于索引结构化字段,比如邮件地址、主机名、状态码、标签等。
字段多用于需要进行过滤、排序、聚合的场景。keyword类型字段只能通过精确值搜索到。

date类型

JSON中没有日期类型,所以在ES中,我们可以自己定义日期类型格式

  1. PUT /my_index
  2. {
  3. "mappings": {
  4. "properties": {
  5. "created_time": {
  6. "type":"date",
  7. "format":"yyyy-mm-dd HH:mm:ss"
  8. }
  9. }
  10. }
  11. }

object类型

JSON天生具有层级关系,文档会包含嵌套的对象。

array类型

在ES中,没有专门的Array数组类型。
但是在默认的情况下,任意一个字段都可以包含0个或多个值,这意味着每个字段的默认都是数组类型。在同一个数组中,数组元素的数据类型是相同的。
ES不支持元素为多个数据类型。常用的数组类型

  1. [1,2,3]
  2. ["sport","eat","walk"]
  3. "user":[{"name":"Marry"},{"name":"John"}]

ip类型

ip类型的字段用于存储IPV4或者IPV6的地址

  1. PUT /my_index
  2. {
  3. "mappings": {
  4. "properties": {
  5. "ip_addr": {
  6. "type":"ip"
  7. }
  8. }
  9. }
  10. }