2017-08-15 36 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

模板仅适用于索引创建时。更改模板将不会对现有索引产生影响

相关问题