之前有提過在設定Dynamic mapping為true或是runtime時
ES會幫我們為特定類型的欄位設置他設定好的type
那我們可以先把這部分設置成false看看,有的人可能會想,這樣不就是得設定好mapping嗎?
不然ES應該不知道怎麼處理吧? 讓我們接下來看~
PUT /student
{
"mappings": {
"dynamic": false,
"properties": {
"first_name": {
"type": "text"
}
}
}
}
POST /student/_doc
{
"first_name": "Adam",
"last_name": "Smith"
}
我們先把dynamic設為false,並只設定好first_name的type
然後我們輸入一個document,包含first_name與last_name欄位
發現可以創建!
那我們來看看用first_name搜尋會怎麼樣吧~
GET /student/_search
{
"query": {
"match": {
"first_name": "Adam"
}
}
}
一樣能找到~
那我們試試看用last_name來找
GET /student/_search
{
"query": {
"match": {
"last_name": "Smith"
}
}
}
這時我們就找不到了~
那為什麼呢? 在dynamic設為false時
而如果我們設定好dynamic設為true時,ES又會對欄位類型有什麼樣的設定呢?
(dynamic設為runtime之後再介紹)
ES會選擇條件更寬鬆的狀況去儲存
例如123會選擇long而非integer,因此很多時候會有浪費空間
因此這樣的動態映射我們也可以對其進行我們想要的方向調整,我們明天會來介紹這樣的功能~
Dynamic templates!
參考資料
Dynamic field mapping:
https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-field-mapping.html