elasticsearch之Index Templates


前言

索引模板允許我們定義在創建新索引時自動應用的模板。模板包括設置和映射,以及一個簡單的模式模板,該模板控制是否應該將模板應用於新索引。

為什么需要索引模板?

在開發中,elasticsearch很大一部分工作是用來處理日志信息的,比如某公司對於日志處理策略是以日期為名創建每天的日志索引。並且每天的索引映射類型和配置信息都是一樣的,只是索引名稱改變了。如果手動的創建每天的索引,將會是一件很麻煩的事情。為了解決類似問題,elasticsearch提供了預先定義的模板進行索引創建,這個模板稱作為Index Templates。通過索引模板可以讓類似的索引重用同一個模板。

模板只在創建索引時應用。更改模板不會對現有索引產生影響。當使用create index API時,作為create index調用的一部分定義的設置/映射將優先於模板中定義的任何匹配設置/映射。
環境:

  • win10
  • elasticsearch6.5.4
  • kibana6.5.4

本文所有的示例演示都在kibanaDev Tools中完成。

創建索引模板

我們針對前文中提出的問題,來實現一個索引模板:

PUT _template/2019
{
  "index_patterns": ["20*", "product1*"],   ①
  "settings":{   ②
    "number_of_shards": 2,
    "number_of_replicas": 1
  },
  "mappings":{  ③
    "doc":{
      "properties":{
        "ip":{
          "type":"keyword"
        },
        "method":{
          "type": "keyword"
        }
      }
    }
  }
}

①,index_patterns是索引模式,指當創建以20product1開頭的索引時,使用該索引模板。注意,在elasticsearch的6.x版本中,索引模板模式index_patterns取代原來的template
②,在settings設置中,我們自定義為該索引分配3個主分片。復制分片不變。
③,mappings中指定映射關系。

查看索引模板

我們來查看一下剛才創建的索引模板。

GET _template/2019

我們還可以通過使用通配符來查詢多個模板。

GET /_template/temp*
GET /_template/template_1,template_2

除此之外,我們可以查看所有可用的模板列表:

GET /_template

也可以查詢某個模板是否存在:

HEAD _template/2019

注意,返回是以HTTP的狀態表示模板是否存在,200表示存在,404表示不存在。

索引模板的使用

有了索引模板,我們就可以創建索引並且添加數據了。

PUT 20190101/doc/1
{
  "ip": "127.0.0.1",
  "method":"GET"
}

PUT 20190102/doc/2
{
  "ip":"192.168.1.1",
  "method":"POST"
}

PUT product1_log/doc/1
{
  "ip":"127.0.0.1",
  "method":"GET"
}

上例會按照模板自動生成3個索引2019010120190102product1_log
當然查詢也是沒有問題的:

GET 2019*/doc/_search
{
  "query": {
    "match_all": {}
  }
}

我們可以通過查詢索引的信息來看一下是否應用上了模板。

GET 20190101
# 結果如下
{
  "20190101" : {
    "aliases" : { },
    "mappings" : {
      "doc" : {
        "properties" : {
          "ip" : {
            "type" : "keyword"
          },
          "method" : {
            "type" : "keyword"
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1557889480975",
        "number_of_shards" : "2",
        "number_of_replicas" : "1",
        "uuid" : "FEuyT5aoTnGP3k_7hCtQFA",
        "version" : {
          "created" : "6050499"
        },
        "provided_name" : "20190101"
      }
    }
  }
}

由上例可以看出,索引20190101已經成功應用上了我們之前創建的模板。

多模板匹配

多個索引模板可以應用於同一個索引,順序由order參數的大小決定。比如現在有着一樣的一個索引模板:

PUT _template/2018_1
{
  "index_patterns": ["2018*"],
  "order":0,
  "settings":{
    "number_of_shards": 2
  }
}

上述索引模板將應用於以2018開頭的所有索引,設置索引的主分片數量為2,order參數為0。

PUT 2018010101/doc/1
{
  "method":"GET"
}
GET 2018010101/_settings
# 結果如下
{
  "2018010101" : {
    "settings" : {
      "index" : {
        "creation_date" : "1557900456281",
        "number_of_shards" : "2",
        "number_of_replicas" : "1",
        "uuid" : "P53RDmT6RRCDY2DlHtpymg",
        "version" : {
          "created" : "6050499"
        },
        "provided_name" : "2018010101"
      }
    }
  }
}

可以看到20180101索引的主分片數量是2,已經成功應用了索引模板。
現在我們再來創建一個索引模板:

PUT _template/2018_2
{
  "index_patterns": ["201802*"],
  "order":1,
  "settings":{
    "number_of_shards": 3
  }
}

上述模板應用於以201802開頭的索引,只是主分片的數量為3,order參數為1。
我們再來創建一個索引:

PUT 2018010201/doc/1
{
  "method": "POST"
}
GET 20180201/_settings
# 結果如下
{
  "20180201" : {
    "settings" : {
      "index" : {
        "creation_date" : "1557901225020",
        "number_of_shards" : "3",
        "number_of_replicas" : "1",
        "uuid" : "-B8_ZiK7QgesmGSzD_8xlQ",
        "version" : {
          "created" : "6050499"
        },
        "provided_name" : "20180201"
      }
    }
  }
}

可以看到20180201索引應用了order參數為1的索引模板。這在某些情況下非常有效,比如我們預料到2018年2月份的日志將會暴增,而其他月份不變,所以我們通過上述創建多個模板來完成索引創建,2月份每天的索引的主分片都多一片,過了2月,恢復正常。

刪除索引模板

刪除索引模板使用DELETE命令刪除即可:

DELETE _template/2019

需要注意的是,刪除索引模板並不會影響其通過該模板創建的索引。那么,如果想要刪除相關的索引怎么辦?比如我們刪除以2019開頭的索引該怎么辦?

DELETE 2019*

可以使用通配符*來完成。


see also:[Elasticsearch 6 新特性與重要變更解讀](https://blog.csdn.net/napoay/article/details/79135136) | [官網:Index Templates](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html)


免責聲明!

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



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