本文我們介紹ES的Dynamic Mapping(動(dòng)態(tài)mapping)
-
es可以自動(dòng)識(shí)別文檔字段類型,從而降低用戶的使用成本,如下圖所示:圖-1
- es對(duì)字段類型的自動(dòng)識(shí)別是依靠JSON文檔的字段類型來實(shí)現(xiàn)自動(dòng)識(shí)別字段的類型,支持類型如下:
| JSON類型 | es類型 |
|---|---|
| null | 忽略 |
| boolean | boolean |
| 浮點(diǎn)類型 | float |
| 整數(shù) | long |
| object | object |
| array | 由第一個(gè)非null值類型決定 |
| string | 1.匹配為日期則設(shè)為date類型(默認(rèn)開啟)2.匹配為數(shù)字的話設(shè)為float或long類型(默認(rèn)關(guān)閉),以上兩種不滿足最后會(huì)設(shè)為text類型,并附帶keyword的子字段 |

圖-2

圖-3
-
日期的自動(dòng)識(shí)別可以自行配置日期格式的,以滿足各種需求自定日期的識(shí)別格式如下圖-4關(guān)閉日期自動(dòng)識(shí)別機(jī)制如下圖-5圖-6
-
字符串是數(shù)字時(shí),默認(rèn)是不會(huì)自動(dòng)識(shí)別為整型,因?yàn)樽址谐霈F(xiàn)數(shù)字是完全合理的
?- numeric_detection可以開啟字符串中數(shù)字的自定識(shí)別,如下圖所示:
圖-7 -
Dynamic Templates(動(dòng)態(tài)模板),允許根據(jù)es自動(dòng)識(shí)別的數(shù)據(jù)類型、字段名等來動(dòng)態(tài)設(shè)定
API如下
? - 所有字符串類型都設(shè)定為keyword類型,即默認(rèn)不分詞,哪些字段需要分詞我們?cè)賳为?dú)設(shè)置
? - 所有以message開頭的字段都設(shè)定為text類型,即分詞
? - 所有以long_開頭的字段都設(shè)定為long類型
? - 所有自動(dòng)匹配為double類型的都設(shè)定為float類型,可以節(jié)省空間
圖-8
匹配規(guī)則一般又如下幾個(gè)參數(shù):
? - match_mapping_type匹配es自動(dòng)識(shí)別的字段類型,如boolean,long,string等
? - match,unmatch 匹配字段名
? - path_match,path_unmatch 匹配路徑
將字符串默認(rèn)使用keyword類型(es默認(rèn)會(huì)為字符串設(shè)置為text類型,并增加一個(gè)keyword的子字段),設(shè)置如下:將以message開頭的字段都設(shè)置為text類型,設(shè)置如下圖-9將double類型的設(shè)定為float,節(jié)省空間,設(shè)定如下圖-10圖-11 - 自定義Mapping的操作步驟如下:
?1. 寫入一條文檔到es臨時(shí)索引中,獲取es自動(dòng)生成的mapping
?2. 修改步驟1得到的mapping,自定義相關(guān)配置
?3.使用步驟2的mapping創(chuàng)建實(shí)際所需的索引








