首页 > 解决方案 > Elasticsearch:为满足特定条件的模板创建别名

问题描述

定义索引模板时是否可以定义不同的别名。不同的别名将引用满足特定条件的索引名称。

例子:

{
   "index_patterns":[
      "*employee_records*"
   ],
   "settings":{
      "number_of_shards":3
   },
   "mappings":{
      "_doc":{
         "dynamic_templates":[
            // Dynamic Mapping
         ]
      }
   },
   "aliases":{
      "employee_records":{}
   }
}

假设我们创建多个索引,例如

在定义索引模板时,这些索引都不存在。映射将保持不变。我想为上述场景 science_dept_employee_records&定义两个别名maths_dept_employee_records

我能想到的一种方法是复制索引模板,以便为

 "index_patterns":[
      "maths_dept_employee_records*"
 ]

和另一个别名

 "index_patterns":[
      "science_dept_employee_records*"
 ]

但是,这会在多个模板中引入大量重复项。有没有更简洁的方法来实现这一点?

标签: elasticsearchelasticsearch-5

解决方案


实现此目的的一种方法是使用多个模板与下面的排序匹配。

一个模板定义了所有的映射和​​设置,并且具有最低的顺序(首先应用):

{
   "index_patterns":[
      "*employee_records*"
   ],
   "order": 1,
   "settings":{
      "number_of_shards":3
   },
   "mappings":{
      "_doc":{
         "dynamic_templates":[
            // Dynamic Mapping
         ]
      }
   }
}

另一个模板定义maths_dept_employee了更高阶索引的别名,并在接下来应用:

{
   "index_patterns":[
      "maths_dept_employee_records*"
   ],
   "order": 2,
   "aliases":{
      "maths_dept_employee_records":{}
   }
}

science_dept_employee指数也是一样:

{
   "index_patterns":[
      "science_dept_employee_records*"
   ],
   "order": 2,
   "aliases":{
      "science_dept_employee_records":{}
   }
}

推荐阅读