如何更新所有现有索引的dynamic_templates?
问题描述:
我正在使用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
时看到结果。
相关项目:
使用Put Mapping API(通过curl HTTP和通过JS客户端),我能够更新映射到现有索引;然而,'include_in_all = false'行为没有实现 – Ricardo