iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 14
0

我打算建立新的 Index 存放週、月歷史資料,但用到的欄位跟日歷史資料 99% 一致,只有成交量的資料格式要修改,每次建類似或相同的 Index 要重新複制貼上 Mapping 也太蠢。Index Template 就可以用來解決這個問題。

Template API

Index Template 顧名思義,就是 Index 的模板。在新建立 Index 時,我們必須給定 Setting 與/或 欄位的 Mappings,如果這些 Setting/Mappings 是之後其化 Index 可以重覆使用的,就可以抽出來變成模板。是不是跟物件導向的概念挺像的。
在 Elasticsearch 新增 Index Template 很簡單,透過 Tempate API,並為 Tempalte 取個名字

PUT /_template/history-prices-template

Index Patterns

Index Tempate 要發揮作用,Index Patterns 屬性是重要關鍵,Index Pattern 是 wildcard expression,它會在建立新的 Index 時去判斷, Index 的命名是如符合 Index Pattern。舉個例子:

PUT /_template/history-prices-template
{
  "index_patterns": ["history-prices-*"],
  ...
}

在上面的程式中,我定義了一個 Index Pattern,之後我打算建立的 Index 如:

  • history-prices-sma
  • history-prices-week
  • history-prices-month
  • history-prices-bband
    命名規則都符合了 Index Pattern,所以上面四個 Index 都會直接套用 Template 定義的 Setting/Maappings。

實驗

打開 ES Cloud 上的 Kibana,打開 Dev Tools,寫個完整的 Index Template:


PUT /_template/history-prices-template
{
  "index_patterns": ["history-prices-*"], 
  "mappings": {
    "properties": {
      "close" : {
        "type" : "float"
      },
      "date" : {
        "type" : "date"
      },
      "high" : {
        "type" : "float"
      },
      "low" : {
        "type" : "float"
      },
      "open" : {
        "type" : "float"
      },
      "stock_id" : {
        "type" : "keyword"
      },
      "volume" : {
        "type" : "integer"
      }
    }
  }
}

然後新建一個 Index,取回它的 Mapping 來看看:

PUT /history-prices-week

GET /history-prices-sma/_mapping

https://ithelp.ithome.com.tw/upload/images/20200926/20129624mVMGTHIR1a.png
沒問題! But...
還記得我在 Day06 時考量過成交量欄位的資料格式,原本的定義是 Integer,但在新的 Index 中要改成 Double ,卻被 Template 設成 Integer 了,怎辦?
莫慌, Template 中的欄位是可以 Override 的,只要在建立 Index 時添加要改的欄位即可:

PUT /history-prices-week 
{
  "mappings": {
    "properties": {
      "volume" : {
        "type" : "double"
      }
    }
  }
}

GET /history-prices-sma/_mapping

https://ithelp.ithome.com.tw/upload/images/20200926/20129624HrL90FunLJ.png

明天要推進啥呢? 我決定先睡一覺再來想。 鐵人賽真的硬…


上一篇
[Day13] 技術指標分析 - New Index + TA-Lib
下一篇
[Day15] 修改 Index 的正確姿勢
系列文
Elastic 戰台股30

尚未有邦友留言

立即登入留言