文档中“级别”字段的类型已从“关键字”更改为“短”,我正在尝试重新索引现有数据以便能够在 Kibana 图表中使用它。旧数据包含以下值:“100%”、“错误”或只是空字符串“”。
我只想在新索引中获取整数。我使用内部重新索引 API(添加新行以使代码段更具可读性):
curl -s -X POST -H 'Content-Type: application/json' https://search-host.us-east-1.es.amazonaws.com/_reindex -d '{
"source": {
"index": "old-index"
},
"dest": {
"index": "new-index"
},
"script": {
"inline": "
if (ctx._source.level == \"error\" || ctx._source.level == \"\")
{
ctx._source.level = -1
} else {
ctx._source.level = Integer.valueOf(ctx._source.level) )
}
"
}
}'
但我收到错误消息:“java.lang.String 无法转换为 java.lang.Number”,因为值末尾有“%”符号。
此外,我没有为 AWS ElasticSearch 启用正则表达式,并且无法按照我的想法进行操作。所以 replaceAll 的变体对我不起作用。例如,如果我有自托管的 ES,它可能是这样的(没有测试过)/(%)?/.matcher(doc['level'].value).replaceAll('$1')
::
但从 AWS ES 我看到了这一点:
Regexes are disabled. Set [script.painless.regex.enabled] to [true] in elasticsearch.yaml to allow them. Be careful though, regexes break out of Painless's protection against deep recursion and long loops.
是否可以在没有正则表达式的情况下用无痛语言替换字符串?