1. 程式人生 > 實用技巧 >Elasticsearch 動態對映——自動檢測

Elasticsearch 動態對映——自動檢測

ES中有一個非常重要的特性——動態對映,即索引文件前不需要建立索引、型別等資訊,在索引的同時會自動完成索引、型別、對映的建立。

欄位自動檢測

在某個欄位第一次出現時,如果之前沒有定義過對映,ES會自動檢測它可能滿足的型別,然後建立對應的對映。

JSON資料

ES中的資料型別

null

不會新增欄位

trueorfalse

boolean

floatingpointnumber

double

integer

long

object

object

array

依賴於第一個非null得值

string

如果通過了date檢測,則為date

如果通過了numeric檢測,則為Number

上面就是型別自動檢測的結果,除了上面列出的基本型別,其他的高階的型別比如geo,ip就需要手動指定了。

日期自動檢測

日期自動檢測,即date_detection是預設開啟的,因此只要符合預設的日期格式,就可以自動建立成date型別

日期的格式為:

[ "strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]

例如:

$ curl -XPUT localhost:9200/test/test/1 -d '{"create":"2015/11/11"}'
{"_index":"test
","_type":"test","_id":"1","_version":1,"created":true} $ curl -XGET localhost:9200/test/_mapping?pretty { "test" : { "mappings" : { "test" : { "properties" : { "create" : { "type" : "date", "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd" } } } } } }

可以通過修改dynamic_date_formats修改日期格式:

PUT my_index
{
    "mappings":{
        “my_type":{"dynamic_date_formats":["MM/dd/yyyy"]}
    }
}

PUT my_index/my_type/1{"create_date":"09/25/2015"}

數字自動檢測

數字自動檢測,即numeric_detection預設是關閉的。因此需要手動開啟:

PUT my_index
{"mappings":{"my_type":{"numeric_detection":true}}}

當執行索引操作時,如果符合float型,就會自動建立為float

long型也是一樣: