Elasticsearch 動態映射——自動檢測


ES中有一個非常重要的特性——動態映射,即索引文檔前不需要創建索引、類型等信息,在索引的同時會自動完成索引、類型、映射的創建。

那么什么是映射呢?映射就是描述字段的類型、如何進行分析、如何進行索引等內容。

本篇就着重講述下,ES中映射的自動檢測特性。

更多內容參考:Elastisearch知識總結

字段自動檢測

在某個字段第一次出現時,如果之前沒有定義過映射,ES會自動檢測它可能滿足的類型,然后創建對應的映射。

JSON數據

ES中的數據類型

null

不會添加字段

true or false

boolean

floating point number

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型也是一樣:


免責聲明!

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



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