爲了能夠把日期字段處理成日期,把數字字段處理成數字,把字符串字段處理成全文本(Full-text)或精確的字符串值,Elasticsearch需要知道每個字段裏面都包含了什麼類型。這些類型和字段的信息存儲(包含)在映射(mapping)中。
Elasticsearch支持以下簡單字段類型:
類型 | 表示的數據類型 |
---|---|
String | string |
Whole number | byte , short , integer , long |
Floating point | float , double |
Boolean | boolean |
Date | date |
查看索引的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插件查詢到的數據
windows 8.1這個字段就是上面mapping對應的brower。類型是string。
我們在kibana的setting查看下site_test各個字段的信息
string類型的brower在analyzed(分析)這選項中打勾了!
現在我們用kibana畫圖試試看看會不會有什麼異常
怎麼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。