一.簡介:
映射:在創建索引時,可以預先定義字段的類型(映射類型,也就是type,一個索引可以有一個或多個類型)及相關屬性。
Elasticsearch會根據JSON源數據的基礎類型猜測你想要的字段映射。將輸入的數據轉變成可搜索的索引項。Mapping就是我們定義的字段的數據類型,同時告訴Elasticsearch如何索引數據以及是否可以被搜索。
作用:會讓索引建立的更加細致和完善。
二.映射類型:
1.1 動態映射:
字段和屬性不需要預先事先定義。在你添加文檔的時候,就會自動添加到索引,這個過程不需要事先在索引進行字段數據類型匹配之類,他會自己推斷數據類型,動態映射是可以配置的。
1.2 顯示映射:
和動態映射相反,顯示映射需要我們在索引映射中進行預先定義。
1.3 更新當前映射:
一般我們不會改變當前的索引的映射類型和字段,因為這樣,意味着廢棄已經索引的文檔。我們應該根據映射創建新的索引並重新索引數據。
三.內置類型:
1.string類型:
text(會進行分析【分詞,建立倒排索引】),keyword【不會分析,只有完全匹配才能搜索到】,(string類型在es5后已經廢棄了)
2.數字類型:
long、integer、short、byte、double、float
3.日期類型:
date(可以解析date和datetime(時分秒)等日期)
4.bool類型:
boolean(可以解析傳遞過來的值,True/False/Yes/No等都能解析成bool類型)
5.二進制數據類型:
binary(不會被檢索)
6.復雜數據類型
數組:無需專門的數據類型
對象數據類型:object,單獨的JSON對象
嵌套數據類型:nested,關於JSON對象的數組
如Company就是一個object類型
emplyment是一個nested類型
7.geo類型(地理數據類型):
地理點數據類型:geo_point,經緯點
地理形狀數據類型:geo_shape
8.專業數據類型:
IPv4數據類型
完成數據類型:completion
單詞計數數據類型:token_counts
三.數據類型可以接收的參數
1.簡單概括:
屬性 | 描述 | 適合類型 |
store | 值為yes表示存儲,為no表示不存儲,默認為no | all |
index | yes表示分析,no表示不分析,默認為true | string |
null_value | 如果字段為空,可以設置一個默認值,比如"人生" | all |
analyzer | 可以設置索引和搜索時用的分析器,默認使用的是standard分析器,還可以使用whitespace,simple,english | all |
include_in_all | 默認es為每個文檔定義一個特殊域_all,它的作用是讓每個字段被搜索到,如果不想讓某個字段被搜索到,可以設置為false | all |
format | 時間格式字符串的模式 | date |
2.詳細:
2.1符串可以接收的參數:
2.2數字型可以接收的參數:
2.3日期型可以接收的參數:
2.4布爾型可以接收的參數:
四.演示
1.創建索引及映射(創建映射后無法修改):
PUT lagou { #參數mappings "mappings": { #指定表jobs "jobs": { #參數(中文特性,性能) "properties": { #指定類型為text,會分詞等 "title":{ "type":"text" }, #指定類型為integer "salary_min": { "type":"integer" }, "city":{ #指定類型為keyword,不分詞,必須完全匹配才搜索得到 "type":"keyword" }. #嵌套properies "Company":{ "properties":{ "name":{ "type":"text" }, "address":{ "type":"text" } } }, #date類型 "pub-date":{ "type":"date" } } } } }
運行成功
查看索引信息一致
2.數據插入:
PUT lagou/job/1 { "title":"Java后端研發", #這里插入時,為"20000"也行,會嘗試轉換為整型 "salary_min":20000, "city":"北京", "Company":{ "name":"百度", "address":"北京" }, "pub_date":"2018-10-28" } PUT lagou/job/2 { "title":"Python分部式爬蟲", "salary_min":20000, "city":"成都", "Company":{ "name":"美團", "address":"成都" }, "pub_date":"2018-10-27" } PUT lagou/job/3 { "title":"前端研發", "salary_min":20000, "city":"北京", "Company":{ "name":"阿里", "address":"北京" }, "pub_date":"2018-10-28" }
3.獲取mapping:
#所有 GET _all/_mapping #索引為拉鈎 GET lagou/_mapping #索引為lagou,type為job GET lagou/_mapping/job
五.參考文獻:
https://blog.csdn.net/zhanglh046/article/details/78529208