我正在使用ElasticSearch 5.1和elasticsearch.js 5.0。我们在生产中有许多不同的应用程序,可能有我们的平台默认索引或自定义索引。我们不知道他们的名字。对于新索引,我可以使用dynamic_template
添加以下indices.putTemplate()
:
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){})
模板仅在索引创建时应用。更改模板不会对现有索引产生影响
可以使用PUT映射API将新模板附加到列表末尾
PUT mapping API有一些例子,其中没有一个适合我的场景。使用indices.putMapping()
的答案会更有帮助,但不是必需的。谢谢你的时间!
[于2012年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的代码,删除了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
行为未实现,这意味着我们仍然可以在现有索引上的_all
下的包含内部对象的记录上搜索purchases.*
。
相关项目: