elasticsearc之mapping的介紹

    爲了能夠把日期字段處理成日期,把數字字段處理成數字,把字符串字段處理成全文本(Full-text)或精確的字符串值,Elasticsearch需要知道每個字段裏面都包含了什麼類型。這些類型和字段的信息存儲(包含)在映射(mapping)中。

   

Elasticsearch支持以下簡單字段類型:

類型表示的數據類型
Stringstring
Whole numberbyteshortintegerlong
Floating pointfloatdouble
Booleanboolean
Datedate

 查看索引的mapping

[root@ELKServer es]# curl -GET "http://192.168.10.49:9200/site_test/test/_mapping"

{
"site_test":
     {
 "mappings":
      {
  "test":
       {
   "properties":
        {
        "@timestamp":
           {
              "type":"date",
              "format":"strict_date_optional_time||epoch_millis"
           },
         "count":
          {
              "type":"long"
           },
          "brower":
          {
          "type":"string"
          }
        }
      }
    }
  }
}

原創地址:http://irow10.blog.51cto.com/2425361/1851001

上面的mapping中我們可以看到這個索引中有三個變量,分別是date類型,long類型和string類型

我們也可以用其他方式查看mapping。用head插件查看索引的索引信息

其中string類型的字段是默認的,考慮到包含全文本,它們的值在索引前要經過分析器分析,並且在全文搜索此字段前要把查詢語句做分析處理。也就是說只要定義爲string的字段默認會按照一個規則拆分字段。如:hello100 會拆分成 hello  100兩個字段。漢字會拆成一個個的。這樣在畫圖是就尷尬了!

下圖是elasticsearch中head插件查詢到的數據

wKioL1fSJSLBGdX6AAAnb89QWw0822.png

windows 8.1這個字段就是上面mapping對應的brower。類型是string。

我們在kibana的setting查看下site_test各個字段的信息

wKiom1fSJaqCXB2tAAApI6lelzM567.png

string類型的brower在analyzed(分析)這選項中打勾了!

現在我們用kibana畫圖試試看看會不會有什麼異常

wKiom1fSJjzS1y7TAAAhbIwKbdc335.png怎麼windows和8.1分成兩個字段畫圖了,這不是我們想要的結果。那該如何解決呢?

自定義mapping

因爲重新更改一個索引的mapping,必須新建索引。

先新建一個site_site索引

[root@ELKServer es]# curl -XPOST http://192.168.10.49:9200/site_test
{"acknowledged":true}

把修改好的mapping放入一個文件類:mapping

{
  "test":
       {
   "properties":
        {
         "@timestamp":
               {
              "type":"date",
              "format":"strict_date_optional_time||epoch_millis"
                },
          "count":
                {
               "type":"long"
                },
           "brower":
                {
               "type":"string",
               "index": "not_analyzed"
                }
          }
      }
  }


對brower字段額外加個屬性not_analyzed(不分詞)!

[root@ELKServer es]# curl -XPOST "http://192.168.10.49:9200/site_test/test/_mapping?pretty" -d '@mapping'
{
  "acknowledged" : true
}

這樣就把索引和mapping都定義好了 然後在導入數據就不會出現分詞的情況!

備註:如果有多個_type,定義一個就好,其他的會按照定義好的格式去自己擴建mapping。

當然我們也可以把上面兩步做到一步到位。如下:

curl -XPUT 'http://192.168.10.49:9200/site_test' -d '@mapping'

上面這條命令能完成建立索引和mapping。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章