iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
Software Development

由淺入深來探討Elasticsearch,從基礎語法到底層相關原理系列 第 11

【Day 11】由淺入深來探討Elasticsearch - Dynamic templates

  • 分享至 

  • xImage
  •  

昨天我們提到可以對Dynamic出來的欄位類型進行調整,我們就來看是怎麼樣運作的吧~

基礎模板

PUT /my_dynamic_template
{
  "mappings": {
    "dynamic_templates" : [
      {
        "strings": {
          "match_mapping_type": "string",
          "mapping": {
            "type": "keyword"
          }
        }
      }
    ]
  }
}

在dynamic_templates array中index=0的key值自己設定想取的名字
然後在match_mapping_type設定好在偵測到哪種類型的資料時,要mapping成哪種type

接著輸入資料,並查看mapping

POST /my_dynamic_template/_doc
{
  "id": "k123456"
}
GET /my_dynamic_template/_mapping

https://ithelp.ithome.com.tw/upload/images/20230913/20161866FugH2QZXr2.png
可以看到已經設置成我們預先設定好的keyword type

設置match與unmatch

  • 用於滿足特定條件的欄位
  • 在match模式,欄位需要滿足設定的條件。unmatch則反之
PUT /my_dynamic_template
{
  "mappings": {
    "dynamic_templates" : [
      {
        "string_only_text": {
          "match_mapping_type": "string",
          "match": "text_*",
          "unmatch": "*_keyword",
          "mapping": {
            "type": "text"
          }
        }
      }
    ]
  }
}

在match與unmatch中除了用wildcard也可以用正規表達式,讓設定更靈活
並且如果有多個能匹配的條件,會優先採用第一個滿足的

設置path_match與path_unmatch

  • 欄位要滿足路徑規則
PUT /my_dynamic_template
{
  "mappings": {
    "dynamic_templates" : [
      {
        "name_determine": {
          "match_mapping_type": "string",
          "path_match": "student.info.name",
          "mapping": {
            "type": "keyword"
          }
        }
      },
      {
        "desc_determine": {
          "match_mapping_type": "string",
          "path_unmatch": "student.info.name",
          "mapping": {
            "type": "text"
          }
        }
      }
    ]
  }
}

path_match表示在student欄位下中info這個object內
符合key為name的時候要設定string的資料為keyword,反之如果key為其他的就是text

輸入文檔:

POST /my_dynamic_template/_doc
{
  "student": {
    "info": {
      "name": "Eason",
      "desc": "he is a good student"
    }
  }
}

https://ithelp.ithome.com.tw/upload/images/20230913/20161866UucD31t7k6.png

最後還有這種
使用dynamic_type佔位符將會替換成ES檢測到的數據類型
最終就會存成之前表格提到預設dynamic的儲存格式
讓你可以部分自己設定,部分由ES處理

PUT /my_dynamic_template
{
  "mappings": {
    "dynamic_templates" : [
      {
        "score_determine": {
          "match_mapping_type": "long",
          "path_match": "student.info.math_score",
          "mapping": {
            "type": "{dynamic_type}"
          }
        }
      }
    ]
  }
}

有關Dynamic templates的部分就先這樣~
後面要再介紹runtime時會再帶到其他需要注意的事項
我們明天會對一些在開發時實際上遇到的問題會用到的API進行介紹~

參考資料
Dynamic templates: https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html


上一篇
【Day 10】由淺入深來探討Elasticsearch - Dynamic mapping
下一篇
【Day 12】由淺入深來探討Elasticsearch - 修改已建立的index結構與相關API
系列文
由淺入深來探討Elasticsearch,從基礎語法到底層相關原理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言