Elasticsearch之索引模板index template與索引別名index alias

 

爲何須要索引模板?html

      在實際工做中針對一批大量數據存儲的時候須要使用多個索引庫,若是手工指定每一個索引庫的配置信息(settings和mappings)的話就很麻煩了。json

因此,這個時候,就存在建立索引模板的必要了!!1api

  索引可以使用預約義的模板進行建立,這個模板稱做Index templates。模板設置包括settings和mappings經過模式匹配的方式使得多個索引重用一個模板。app

  更多,請見dom

https://www.elastic.co/guide/en/elasticsearch/reference/2.4/indices-templates.htmlcurl

 

索引別名的應用場景elasticsearch

  好比,公司使用es收集應用的運行日誌,每一個星期建立一個索引庫,這樣時間長了就會建立不少的索引庫,操做和管理的時候很不方便。ide

  因爲新增索引數據只會操做當前這個星期的索引庫,因此就建立了兩個別名。oop

    curr_week:這個別名指向這個星期的索引庫,新增數據操做這個索引庫。ui

    last_3_month:這個別名指向最近三個月的全部索引庫,由於咱們的需求是查詢最近三個月的日誌信息。

  後期只須要修改這兩個別名和索引庫之間的指向關係便可。應用層代碼不須要任何改動。

  還要把三個月之前的索引庫close掉,留存最近一年的日誌數據,一年之前的數據刪除掉。

   說明:能夠相似,指定多個索引庫查詢。定義一個索引別名,如zhouls_all,將索引zhouls1映射到這個別名上,把索引zhouls2,把索引zhoulsn,也映射到這個別名上。

  那麼,在經過別名來查詢時,直接同查詢別名zhouls_all,就能夠把對應全部的索引zhouls,1,2,...n都一次性查詢完了。

   可是,若是你是具體要插入和操做數據,則,就不方便使用別名了。而是具體到某個索引zhoulsn了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 索引模板index template操做示例

  好比,咱們會建立zhouls,zhouls1,zhouls2,,,等這樣的索引庫。那麼,咱們建立模板索引庫指定是zhouls*。

那麼,

  1建立自定義模板

  在es的安裝目錄下,輸入,以下,回車

curl -XPUT 192.168.80.10:9200/_template/template_1 -d '
{
    "template" : "zhouls*",
    "order" : 0,
    "settings" : {
        "number_of_shards" : 1
    },
    "mappings" : {
        "type1" : {
            "_source" : { "enabled" : false }
        }
    }
}
'

   說明:  (1)模板template_1匹配全部的以zhouls開頭的索引。

      (2)索引模板是template_1,索引是zhouls*。

    

 

 

 

 

 

 

[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XPUT '192.168.80.10:9200/zhouls10/emp/1' -d '{"name":"zs"}'       (給索引zhouls10賦值)
{"_index":"zhouls10","_type":"emp","_id":"1","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}[hadoop@HadoopMaster elasticsearch-2.4.3]$
[hadoop@HadoopMaster elasticsearch-2.4.3]$
[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XGET http://192.168.80.10:9200/zhouls10/_settings?pretty    
{
"zhouls10" : {
"settings" : {
"index" : {
"creation_date" : "1488280491485",
"uuid" : "R4dWmru2T9uO1JFOE98r5w",
"number_of_replicas" : "1",
"number_of_shards" : "1",
"version" : {
"created" : "2040399"
}
}
}
}
}
[hadoop@HadoopMaster elasticsearch-2.4.3]$

 

 

   

 

 

 

 

  二、查看定義的模板

curl -XGET 192.168.80.10:9200/_template/template_1 

 

     我這裏,建立定義模板temp*就省略了。

 

 

 

 

 

 

   三、刪除定義模板

[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XDELETE 192.168.80.10:9200/_template/template_1     (刪除定義的模板)
{"acknowledged":true}[hadoop@HadoopMaster elasticsearch-2.4.3]$
[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XGET http://192.168.80.10:9200/_template/template_1?pretty   (查看,可見刪除模板成功
{ }
[hadoop@HadoopMaster elasticsearch-2.4.3]$

 

 

 

[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XDELETE 192.168.80.10:9200/_template/temp*    (刪除定義的模板)
{"acknowledged":true}[hadoop@HadoopMaster elasticsearch-2.4.3]$  
[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XGET http://192.168.80.10:9200/_template/temp*?pretty    (查看下,刪除成功)
{ }
[hadoop@HadoopMaster elasticsearch-2.4.3]$

 

 

 

 

 

 

 

 

 

 

  四、建立多個索引模板

         當存在多個索引模板時而且某個索引二者都匹配時,settings和mpapings將合成一個配置應用在這個索引上。合併的順序可由索引模板的order屬性來控制。

curl -XPUT 192.168.80.10:9200/_template/template_1 -d '
{
    "template" : "*",
    "order" : 0,
    "settings" : {
        "number_of_shards" : 1
    },
    "mappings" : {
        "type1" : {
            "_source" : { "enabled" : false }
        }
    }
}
'

   獲得,

 

   而後,輸入以下:再建立一個模板

curl -XPUT 192.168.80.10:9200/_template/template_2 -d '
{
    "template" : "te*",
    "order" : 1,
    "settings" : {
        "number_of_shards" : 1
    },
    "mappings" : {
        "type1" : {
            "_source" : { "enabled" : true }
        }
    }
}
'

  獲得,

 

 

[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XGET 192.168.80.10:9200/_template/template_1       (查看模板template_1)
{"template_1":{"order":0,"template":"*","settings":{"index":{"number_of_shards":"1"}},"mappings":{"type1":{"_source":{"enabled":false}}},"aliases":{}}}[hadoop@HadoopMaster elasticsearch-2.4.3]$
[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XGET 192.168.80.10:9200/_template/template_2        (查看模板template_1)
{"template_2":{"order":1,"template":"te*","settings":{"index":{"number_of_shards":"1"}},"mappings":{"type1":{"_source":{"enabled":true}}},"aliases":{}}}[hadoop@HadoopMaster elasticsearch-2.4.3]$
[hadoop@HadoopMaster elasticsearch-2.4.3]$

  上述order爲1的配置將覆蓋order爲0的配置,最終索引的配置source的enabled爲true。

  注意:order值大的模板內容會覆蓋order值小的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

五、模板配置文件

         除了以上方式,索引模板也能夠在文件中進行配置。索引模板的配置文件須要在每一個

主節點的config目錄下,目錄結構爲:config/templates/template_1.json,temp
late_1.json的樣例以下:

 1 {  
 2   "template-logstash" : { 3 "template" : "logstash*", 4 "settings" : { 5 "index.number_of_shards" : 5, 6 "number_of_replicas" : 1, 7 "index" : { 8 "store" : { 9 "compress" : { 10 "stored" : true, 11 "tv": true 12  } 13  } 14  } 15  }, 16 "mappings" : { 17 "_default_" : { 18 "properties" : { 19 "dynamic" : "true", 20  }, 21  }, 22 "loadbalancer" : { 23 "_source" : { 24 "compress" : true, 25  }, 26 "_ttl" : { 27 "enabled" : true, 28 "default" : "10d" 29  }, 30 "_all" : { 31 "enabled" : false 32  }, 33 "properties" : { 34 "@fields" : { 35 "dynamic" : "true", 36 "properties" : { 37 "client" : { 38 "type" : "string", 39 "index" : "not_analyzed" 40  }, 41 "domain" : { 42 "type" : "string", 43 "index" : "not_analyzed" 44  }, 45 "oh" : { 46 "type" : "string", 47 "index" : "not_analyzed" 48  }, 49 "responsetime" : { 50 "type" : "double", 51  }, 52 "size" : { 53 "type" : "long", 54 "index" : "not_analyzed" 55  }, 56 "status" : { 57 "type" : "string", 58 "index" : "not_analyzed" 59  }, 60 "upstreamtime" : { 61 "type" : "double", 62  }, 63 "url" : { 64 "type" : "string", 65 "index" : "not_analyzed" 66  } 67  } 68  }, 69 "@source" : { 70 "type" : "string", 71 "index" : "not_analyzed" 72  }, 73 "@timestamp" : { 74 "type" : "date", 75 "format" : "dateOptionalTime" 76  }, 77 "@type" : { 78 "type" : "string", 79 "index" : "not_analyzed", 80 "store" : "no" 81  } 82  } 83  } 84  } 85  } 86 }

 

 

 

 

 

 

 

 

 

 

 

 

2、索引別名index alias操做示例

一、增長索引別名

curl -XPOST 'http://192.168.80.10:9200/_aliases' -d '
{
    "actions" : [
        { "add" : { "index" : "zhouls", "alias" : "zhouls_all" } }
    ]
}'  

  即,zhouls是索引,zhouls_all是索引別名

  能夠看到,成功啦!

 

 

 

 

 二、能夠同時爲多個索引映射到一個索引別名

 

curl -XPOST 'http://192.168.80.10:9200/_aliases' -d '
{
    "actions" : [
        { "add" : { "index" : "zhouls", "alias" : "zhouls_all" } },
        { "add" : { "index" : "zhouls10", "alias" : "zhouls_all" } }
    ]
}'

 

 

 

 

 

 

 

三、刪除索引別名

  一、刪除索引zhouls映射的索引別名zhouls_all

curl -XPOST 'http://192.168.80.10:9200/_aliases' -d '
{
    "actions" : [
        { "remove" : { "index" : "zhouls", "alias" : "zhouls_all" } }
    ]
}'

 

  二、刪除索引zhouls10映射的索引別名zhouls_all

curl -XPOST 'http://192.168.80.10:9200/_aliases' -d '
{
    "actions" : [
        { "remove" : { "index" : "zhouls10", "alias" : "zhouls_all" } }
    ]
}'

相關文章
相關標籤/搜索