我正在使用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){})
模板僅在創建索引時應用。更改模板將會對現有的指數
沒有影響的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
時看到結果。
相關項目:
- Create or update mapping in elasticsearch
- ElasticSearch client.indices.putMapping always fail
- PutMapping api url is incorrect
使用Put Mapping API(通過curl HTTP和通過JS客戶端),我能夠更新映射到現有索引;然而,'include_in_all = false'行爲沒有實現 – Ricardo