2015-10-08 178 views
1

我的應用程序在ElasticSearch上創建索引模板。稍後,應用程序已更新,需要更新索引模板以支持新字段。ElasticSearch索引模板版本

  1. 有沒有一種方法來設置索引模板 一個有些標識符(除了它的名字這始終是一樣的),這樣我的應用程序可以 比較應用程序版本和部署 版本之間的這些值? (唯一的ID/ETag的/別的)

  2. 另外,如果我無法檢測的區別:什麼是 修改索引模板多次,主要是修改 不執行任何實際變化的成本是多少?

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

謝謝。

回答

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 

您會在裏面找到映射和元數​​據。

這可以用於存儲映射關聯的產品版本。

+0

優秀的答案!正是我需要的自動索引映射更新 –

0

我已經通過使用版本號,構建ID或時間戳作爲索引名稱的一部分(並使用索引別名指向每個應用程序的相關索引)來解決此問題。

看到這個職位的一個更詳細的例子:https://www.elastic.co/blog/changing-mapping-with-zero-downtime

+0

感謝您的快速回復。這是一篇有趣的文章。索引本身的格式爲'logstash-2015.08.31',因此我不需要改變他們的名字,因爲我只是增加了新的字段。問題是檢測到已部署的索引模板與我的應用程序代碼中存在的索引模板之間的差異。 –

+1

我不知道Elasticsearch等同於數據庫遷移工具。既然你可以從ES中獲取當前的映射,那麼就可以構建這樣的東西。讓我知道你想出了什麼。 –

+0

也許簡單的解決方案只是一個生成最新應用程序映射json的迴歸測試,然後請求Elasticsearch中的最新映射json進行比較(如果存在差異,則部署失敗) –