elasticsearch中的mapping簡介---轉載
原址https://www.cnblogs.com/xiaozengzeng/p/12359311.html
預設mapping
ES能非常聰明的識別出"name"和"description"欄位的型別是string, ES預設會建立以下的mapping。
mappings: {
item: {
properties: {
description: {
type: string
}
name: {
type: string
}
}
}}
mapping引數
欄位中的type(es資料型別)
1.text 字串,分詞,全文索引
2.keyword 關鍵字,不分詞,適合id,email等這種不分詞的欄位
3.numeric 數字型別有integer、long、short、byte、double、float等型別
4.date 時間型別
5.boolean 布林型別
6.binary 接收base64編碼的字串
7.rang 具體有integer_range,float_range,long_range,double_range,date_range,ip_range,可儲存範圍資料,如下插入
什麼是mapping
ES的mapping非常類似於靜態語言中的資料型別:宣告一個變數為int型別的變數, 以後這個變數都只能儲存int型別的資料。同樣的, 一個number型別的mapping欄位只能儲存number型別的資料。
同語言的資料型別相比,mapping還有一些其他的含義,mapping不僅告訴ES一個field中是什麼型別的值, 它還告訴ES如何索引資料以及資料是否能被搜尋到。
當你的查詢沒有返回相應的資料, 你的mapping很有可能有問題。當你拿不準的時候, 直接檢查你的mapping。
剖析mapping
一個mapping由一個或多個analyzer組成, 一個analyzer又由一個或多個filter組成的。當ES索引文件的時候,它把欄位中的內容傳遞給相應的analyzer,analyzer再傳遞給各自的filters。
filter的功能很容易理解:一個filter就是一個轉換資料的方法, 輸入一個字串,這個方法返回另一個字串,比如一個將字串轉為小寫的方法就是一個filter很好的例子。
一個analyzer由一組順序排列的filter組成,執行分析的過程就是按順序一個filter一個filter依次呼叫, ES儲存和索引最後得到的結果。
總結來說, mapping的作用就是執行一系列的指令將輸入的資料轉成可搜尋的索引項。
對於 String 欄位,可以設定型別為 text 或者 keyword。text型別的資料會被分詞處理,而 keyword 型別的資料不會被分詞處理。因此想根據某個欄位精確查詢的話,可以將其設定為 keyword 型別(版本5.0之後)。
如果一個索引庫已經存在索引文件,這時想要更改索引的mapping的話,最好刪除當前索引庫,重新建立索引庫,設定 mapping 之後,將資料重新新增到索引庫中。
預設analyzer
回到我們的例子, ES猜測description欄位是string型別,於是預設建立一個string型別的mapping,它使用預設的全域性analyzer, 預設的analyzer是標準analyzer, 這個標準analyzer有三個filter:token filter, lowercase filter和stop token filter。
我們可以在做查詢的時候鍵入_analyze關鍵字檢視分析的過程