(1). Mapping

ES在创建索引时,如果没有指定Mapping,那么在我们插入数据时,会自动进行类型的断判,但是,有时候我们需要进行明确的字段类型.自动判断类型的规则如下:

JSON Type Field Type
Boolean:true or false boolean
Number:123 long
Float:123.45 double
String,valid date:”2020-12-12” date
String:”foo bar” String

(2). ES支持的类型

类型 表示的数据类型
String string,text,keyworld
Number byte,short,integer,long
Float float,double
Boolean boolean
Date date

string类型在ES旧版本中使用较多,从ES5.X开始不再支持,由text和keyword类型替代.

text类型:当一个字段要被全文搜索的

,比如:商品描述,应该使用text类型,当设置为:text类型以后,字段内容会被分词器进行分析,并解析成一个一个的词项,并生成倒排索引.该类型的字段不用于排序,很少用于聚合.

keyword类型:该类型适用于索引结构化的字段

,比如:emial地址,商品状态(status),商品类别ID(category_id),标签.如果字段只需要进行过滤,排序,聚合,则应该定义为:keyword,该类型的字段只能通过精确值搜索到.

(3). 创建索引并指定Mapping

创建Index并指定Mapping

PUT /hobby
{
  "settings": {
    "index":{
      "number_of_shards":"1",
      "number_of_replicas":"0"
    }
  },
  "mappings": {
    "properties":{
      "name": { "type": "text"  },
      "age" : { "type": "integer" },
      "email" : { "type" : "keyword"  },
      "hobby" : { "type" : "text" }
    }
  }
}

(4). 修改索引mappings信息

PUT /hobbys/_mappings
{
  "properties":{
    "sex":{ "type" : "keyword" }    
  }
}

(5). 查看索引信息

# 查看索引信息
GET /hobbys

# 查看索引信息结果
{
  "hobbys" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "integer"
        },
        "email" : {
          "type" : "keyword"
        },
        "hobby" : {
          "type" : "text"
        },
        "name" : {
          "type" : "text"
        },
        "sex" : {
          "type" : "keyword"
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1607754571299",
        "number_of_shards" : "1",
        "number_of_replicas" : "0",
        "uuid" : "nvOsX3qQSlm5OUeGNsj9Cw",
        "version" : {
          "created" : "7010099"
        },
        "provided_name" : "hobbys"
      }
    }
  }
}