# 1、映射(mapping)介紹
**映射**:創建索引的時候,可以預先定義字段的類型以及相關屬性
elasticsearch會根據json源數據的基礎類型猜測你想要的字段映射,將輸入的數據轉換成可搜索的索引項,mapping就是我們自己定義的字段數據類型,同時告訴elasticsearch如何索引數據以及是否可以被搜索
**作用**:會讓索引建立的更加細致和完善
**類型**:靜態映射和動態映射
# 2、內置映射類型(也就是數據類型)
*string類型*:text,keyword兩種
text類型:會進行分詞,抽取詞干,建立倒排索引
keyword類型:就是一個普通字符串,只能完全匹配才能搜索到
*數字類型*:long,integer,short,byte,double,float
*日期類型*:date
*bool(布爾)類型*:boolean
*binary(二進制)類型*:binary
*復雜類型*:object,nested
*geo(地區)類型*:geo-point,geo-shape
*專業類型*:ip,competion
# 3、屬性介紹
store屬性
index屬性
null_value屬性
analyzer屬性
include_in_all屬性
format屬性

更多屬性:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html
# 4、創建索引(相當于創建數據庫)、創建表、創建字段-設置字段類型,添加數據
```
#創建索引(設置字段類型)
PUT jobbole #創建索引設置索引名稱
{
"mappings": { #設置mappings映射字段類型
"job": { #表名稱
"properties": { #設置字段類型
"title":{ #title字段
"type": "text" #text類型,text類型可以分詞,建立倒排索引
},
"salary_min":{ #salary_min字段
"type": "integer" #integer數字類型
},
"city":{ #city字段
"type": "keyword" #keyword普通字符串類型
},
"company":{ #company字段,是嵌套字段
"properties":{ #設置嵌套字段類型
"name":{ #name字段
"type":"text" #text類型
},
"company_addr":{ #company_addr字段
"type":"text" #text類型
},
"employee_count":{ #employee_count字段
"type":"integer" #integer數字類型
}
}
},
"publish_date":{ #publish_date字段
"type": "date", #date時間類型
"format":"yyyy-MM-dd" #yyyy-MM-dd格式化時間樣式
},
"comments":{ #comments字段
"type": "integer" #integer數字類型
}
}
}
}
}
#保存文檔(相當于數據庫的寫入數據)
PUT jobbole/job/1 #索引名稱/表/id
{
"title":"python分布式爬蟲開發", #字段名稱:字段值
"salary_min":15000, #字段名稱:字段值
"city":"北京", #字段名稱:字段值
"company":{ #嵌套字段
"name":"百度", #字段名稱:字段值
"company_addr":"北京市軟件園", #字段名稱:字段值
"employee_count":50 #字段名稱:字段值
},
"publish_date":"2017-4-16", #字段名稱:字段值
"comments":15 #字段名稱:字段值
}
```
# 5、獲取索引下的mappings映射字段類型
```
#獲取一個索引下的所有表的mappings映射字段類型
GET jobbole/_mapping
#獲取一個索引下的指定表的mappings映射字段類型
GET jobbole/_mapping/job
```
【重點】在創建索引時一旦給字段設置了類型后就不可修改了,如果必須要修改就的重新創建索引,所以在創建索引時就必須確定好字段類型