elasticsearch中的mapping簡介


默認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關鍵字查看分析的過程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM