ElasticSearch索引模板版本控制

时间:2015-10-08 15:44:15

标签: elasticsearch

我的应用程序在ElasticSearch上创建索引模板。稍后,应用程序将更新,需要更新索引模板以支持新字段。

  1. 有没有办法为索引模板设置一些标识符 (除了它的名字总是相同的),这样我的应用程序可以 比较应用版本和部署之间的这些值 版? (唯一ID / ETag /其他)

  2. 或者,如果我无法发现差异:成本是多少 多次修改索引模板,主要是修改 没有实际变化?

  3. 我可以找到一个索引使用哪个模板(以及它的哪个版本, 如果存在这样的能力)?

  4. 感谢。

3 个答案:

答案 0 :(得分:1)

创建索引模板时,您可以使用映射元数据来存储所需的额外信息,以了解创建映射的应用程序版本。

PUT _template/my_template
{
  "template" : "logstash-*",
  "mappings" : {
      "logs" : {
        "_meta" : {
          "product" : "my_product",
          "version" : "1.0.1"
        },
        "_source" : {"enabled" : "true"},
        "properties" : {
        }
      }
  }
}

然后查询现有索引以查找上次创建的索引,然后获取其映射。

GET logstash-2015.10.08/_mapping

你会在里面找到映射和元数​​据。

这对于存储映射关联的产品版本非常有用。

答案 1 :(得分:1)

  1. 是的,您可以通过在模板中包含"version": <version number>来使用ElasticSearch的模板版本控制功能。

来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html#versioning-templates

  1. 修改模板是没有成本的,因为它只是存储在ES的数据库中(读作“ ES使用的存储”)。唯一的区别是对模板的更新将仅适用于正在创建的新索引,而不会应用于现有索引。

答案 2 :(得分:0)

我之前通过使用版本号,构建ID或时间戳作为索引名称的一部分(并使用索引别名指向每个应用程序的相关索引)解决了这个问题。 / p>

有关更详细的示例,请参阅此帖子:https://www.elastic.co/blog/changing-mapping-with-zero-downtime