2017-08-15 69 views
0

我正在使用ElasticSearch 5.1和elasticsearch.js 5.0。我們在生產中有許多不同的應用程序,可能有我們的平臺默認索引或自定義索引。我們不知道他們的名字。對於新的指標,我可以添加以下使用indices.putTemplate()dynamic_template如何更新所有現有索引的dynamic_templates?

var elasticsearch = require('elasticsearch'); 
var client = new elasticsearch.Client({ /*...*/ }); 
var params = { 
    //... 
    "body" : { 
    "template":"*", 
    "settings":{   
     "index.mapper.dynamic":true 
     //...   
    }, 
    "mappings":{ 
     "_default_":{ 
     "properties":{ 
      //... 
     }, 
     "dynamic_templates":[{ 
      "template_purchases_inner_fields": { 
      "path_match":"purchases.*", 
      "mapping": { "include_in_all": false } 
      } 
     } 
     //, ... 
     ] 
     } 
    } 
    } 
}; 
client.indices.putTemplate(params,function(err,resp){}) 

然而,Index templates docs

模板僅在創建索引時應用。更改模板將會對現有的指數

沒有影響的Dynamic templates docs

新的模板可以附加到列表的與PUT映射API

PUT mapping API有結束一些例子,其中沒有一個符合我的情況。使用indices.putMapping()的答案會更有幫助,但不是必需的。謝謝你的時間!


[上編輯2017年8月21日,日食日] 這是我試圖通過JS API來改變它的代碼:

var dynamicTemplates = [{ 
    "template_purchases_inner_fields": { 
     "path_match": "purchases.*", 
     "mapping": { "include_in_all": false} 
    } 
    } 
    //... 
    ]; 

params = { body: { "dynamic_templates": dynamicTemplates }}; 
params.index = "_all"; 
params.type = "_default_"; 
//... 
client.indices.putMapping(params,function(err,resp){}) 

這是通過代碼Linux curl,w/properties字段已刪除。 請注意,您應該在這裏重新添加其他模板不覆蓋以前的:

curl -XPUT http://localhost:9200/_all/_default_/_mapping -d "{\"_default_\":{\"dynamic_templates\":[{\"template_purchases_inner_fields\":{\"mapping\":{\"include_in_all\":false},\"path_match\":\"purchases.*\"}}]}}" 

檢查上elasticsearch-head,在這兩種情況下,映射被更新現有的指數也一樣,如果它的工作。然而,include_in_all=false行爲沒有實現,這意味着我們仍然可以在包含現有索引下的purchases.*下的內部對象的記錄上搜索_all時看到結果。


相關項目:

+0

使用Put Mapping API(通過curl HTTP和通過JS客戶端),我能夠更新映射到現有索引;然而,'include_in_all = false'行爲沒有實現 – Ricardo

回答

0

目前的答案是我們不能將其應用到現有指標的基礎上,Index templates docs

模板僅適用於索引創建時。更改模板將不會對現有索引產生影響