elasticsearch 之mapping

來源:互聯網
上載者:User

標籤:partition   資料   search   exp   image   轉換   log   apple   ota   

搭好elk 後,有時候會發現kibana 統計資料時,資料類型不對,這個時候就和elasticsearch的mapping有關,雖然我們可以用logstash修改傳入es裡的資料類型,比如 float 或者int 或者string。但是沒有double等類型,就算轉換了,你會發現寫入es的資料還是根據es裡mapping表來定義的。接下來我們來學習修改es的mapping,當然mapping的功能有很多種,比如定義索引是否分詞,分區和副本的數量是多少等等。

1) 什麼是mapping

ES的mapping非常類似於靜態語言中的資料類型:聲明一個變數為int類型的變數, 以後這個變數都只能儲存int類型的資料。同樣的, 一個number類型的mapping欄位只能儲存number類型的資料。

同語言的資料類型相比,mapping還有一些其他的含義,mapping不僅告訴ES一個field中是什麼類型的值, 它還告訴ES如何索引資料以及資料是否能被搜尋到。

當你的查詢沒有返回相應的資料, 你的mapping很有可能有問題。當你拿不準的時候, 直接檢查你的mapping。

2) 剖析mapping

一個mapping由一個或多個analyzer組成, 一個analyzer又由一個或多個filter組成的。當ES索引文檔的時候,它把欄位中的內容傳遞給相應的analyzer,analyzer再傳遞給各自的filters。

filter的功能很容易理解:一個filter就是一個轉換資料的方法, 輸入一個字串,這個方法返回另一個字串,比如一個將字串轉為小寫方法就是一個filter很好的例子。

一個analyzer由一組順序排列的filter組成,執行分析的過程就是按順序一個filter一個filter依次調用, ES儲存和索引最後得到的結果。

總結來說, mapping的作用就是執行一系列的指令將輸入的資料轉成可搜尋的索引項目。

 

3)實戰轉換mapping資料類型

我們使用logstash 傳入一個索引,這個時候這個索引載入的為預設mapping,如下

 

{

  • "parking_total": {
    • "mappings": {
      • "parking_total": {
        • "properties": {
          • "@timestamp": {
            • "type": "date",
            • "format": "strict_date_optional_time||epoch_millis"
            },
          • "@version": {
            • "type": "string"
            },
          • "active": {
            • "type": "string"
            },
          • "host": {
            • "type": "string"
            },
          • "kafka": {
            • "properties": {
              • "consumer_group": {
                • "type": "string"
                },
              • "msg_size": {
                • "type": "long"
                },
              • "offset": {
                • "type": "long"
                },
              • "partition": {
                • "type": "long"
                },
              • "topic": {
                • "type": "string"
                }
              }
            },
          • "logdate": {
            • "type": "string"
            },
          • "message": {
            • "type": "string"
            },
          • "path": {
            • "type": "string"
            },
          • "total": {
            • "type": "string"
            },
          • "type": {
            • "type": "string"
            }
          }
        }
      }
    }

}

其中我們就是要修改 total 和 active 這2個欄位,修改mapping時需要將索引全部刪除。這裡我們來操作一下

 

 

接下來,我們先建立這個索引的mapping 因為索引沒有的時候,mapping也可以存在,其實是刪除索引的時候mapping 不會跟著刪除的,當然建立的時候,如果有的欄位沒有定義,mapping 會自動按照預設來定義。

 {  "mappings":
          {
        "parking_total" : {  
            "properties" : {  
                "@timestamp" : {  
                    "type" : "date"  
                },  
                "message" : {  
                    "type" : "string"  
                },  
                "total" : {  
                    "type" : "double"  
                },  
                 "active" : {  
                    "type" : "double"  
                }
            }  
        }  
    }  
 }

 

這樣在重新匯入資料,就成功啦。

                                                  by:V

 

elasticsearch 之mapping

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.