問題
- 什么是index mapping?
- mapping 有什么用?
- 如何設(shè)置mapping?
- 如何動(dòng)態(tài)設(shè)置mapping?
1.什么是Index mapping
個(gè)人理解類似于MySQL字段的定義,可以定義是什么類型,但是Es作為一個(gè)索引中間件,肯定支持中文分詞等一些其他特性
官網(wǎng)理解:

官網(wǎng)Mapping解釋
mapping可以定義文檔字段:
- 哪些字符串應(yīng)該被當(dāng)做全文字段
- 這些字段分別是什么類型
- 這些字段是否索引到catch-all字段中
- 可以格式化某些value
- 自定義規(guī)則去mapping 動(dòng)態(tài)添加的字段
官網(wǎng)和我理解不相上下!
2.mapping 有什么用?
ES mapping 就是對(duì)索引中的字段做一些聲明。比如字符串用什么分詞器,索引用不用分詞等約束
3.如何設(shè)置mapping?
創(chuàng)建一個(gè)索引:
curl -XPOST "http://127.0.0.1:9200/test-mapping"

創(chuàng)建索引
假設(shè)索引type為doc,創(chuàng)建mapping:
curl -XPUT http://localhost:9200/test-mapping/doc/_mapping -d '
{
"doc": {
"_source": {
"enabled": true
},
"_all": {
"enabled": false
},
"properties": {
"uuid": {
"type": "keyword"
},
"username": {
"type": "text"
},
"password": {
"type": "text"
},
"device_id": {
"type": "keyword"
},
"user_id": {
"type": "keyword"
}
}
}
}
'

設(shè)置ES-Mapping
4.如何動(dòng)態(tài)設(shè)置mapping?
比如有多個(gè)index,名字為 teiba_1, tieba_2這樣我們就會(huì)做很多重復(fù)的工作去為每一個(gè)index創(chuàng)建mapping,當(dāng)然ES幫我們想到了這一點(diǎn),可以設(shè)置一個(gè)模板,然后相同類型(正則匹配上)的Index就可以應(yīng)用相同的mapping
curl -XPUT http://localhost:9200/_template/tieba_template -d '
{
"order": 1,
"template": "tieba*",
"mappings": {
"_default_": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}
}
}
'

設(shè)置ES-Mapping-Template
創(chuàng)建兩個(gè)index: tieba1 tieba2
curl -XPOST http://localhost:9200/tieba1
curl -XPOST http://localhost:9200/tieba2
然后查看這2個(gè)index的mapping

tieba1-mapping

tieba2-mapping
可以看到這2個(gè)index都成功應(yīng)用了這個(gè)template的mapping
總結(jié)
- mapping 作用就是定義字段類型,以及分詞器,格式化之類的約束
- 通過設(shè)置templte可以動(dòng)態(tài)為index設(shè)置mapping