Elasticsearch:为满足特定条件的模板创建别名

时间:2019-06-07 04:42:51

标签: elasticsearch elasticsearch-5

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

示例:

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

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

  • science_dept_employee_records_2015
  • science_dept_employee_records_2016
  • maths_dept_employee_records_2015
  • maths_dept_employee_records_2016

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

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

提供别名。
 "index_patterns":[
      "maths_dept_employee_records*"
 ]

和另一个别名

 "index_patterns":[
      "science_dept_employee_records*"
 ]

但是,这将在多个模板之间引入大量重复项。有没有更简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:3)

一种实现此目的的方法是使用multiple templates matching,其排序方式如下。

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

{
   "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":{}
   }
}