我正在使用AWS弹性服务并索引65万个数据。我需要在已经索引的文档中添加两个新字段。当我尝试调用UpdateByQuery函数时,会出现错误时," inline [inline],操作[update]和lang [groovy]的脚本被禁用了。我通过添加
修复了它script.engine.groovy.inline.aggs:onscript.engine.groovy.inline.update:在on lasticsearch.yml上,它在本地上完美工作。如何在AWS ES上添加此配置?当我在AWS弹性服务中更新文档时,我会遇到相同的错误。
这是我的代码。我想通过添加新字段网站和时间来更新所有记录(其中"设备" = deviceval)。
var site = 'some value';
var deviceVal = '123';
var theScript = {
"inline": "ctx._source.Site = '"+ site + "';ctx._source.Time = '"+ new Date().getTime() + "'"
}
var match = {
"match": { "device": deviceVal }
}
client.updateByQuery({
index: 'my_index',
type:'txt',
"body": {
"query": match,
"script":theScript
}
}, function (error, response) {
// console.log("success")
console.log('error--',error)
console.log('response--',response)
});
在另一个答案上构建我们使用logstash将AWS ES群集重新索引的另一个答案,您只需要在提到# add other transformations here
的情况下添加另一个转换即可。
在您的情况下,输入部分需要包含设备的查询:
input {
elasticsearch {
hosts => ["my-elasticsearch-domain.us-west-2.es.amazonaws.com:80"]
index => "my_index"
query => '{"query": {"match":{"device": "123"}}}'
docinfo => true
}
}
,过滤器部分将归结为此,即我们重命名@timestamp
字段并添加Site
字段:
filter {
mutate {
remove_field => [ "@version" ]
rename => { "@timestamp" => "Time" }
add_field => { "Site" => "some value" }
}
}