1、背景
需要将es 一个索引的字段由 text类型修改成 keyword类型,按照重建索引的步骤执行完后,在dbeaver工具中查询出现报错。
SQL 错误 [bad_server]: Server encountered an error [Multiple values (returned by [metadata.exchange_rate]) are not supported]. [SqlIllegalArgumentException[Multiple values (returned by [metadata.exchange_rate]) are not supported]
2、问题原因
1、用http请求查询发现,exchange_rate 这个字段在metadata结构内返回了,结构外又以 metadata.exchange_rate 的形式返回了。这导致dbeaver 识别到俩个重复的列名,抛出报错。
{
"metadata": {
"exchange_rate": 1
}
"metadata.exchange_rate":1
}
2、查看该索引mapping, 并没有metadata.exchange_rate这个字段,exchange_rate 是在 metadata下的子字段
{
"mappings": {
"properties": {
"metadata": {
"exchange_rate": {
"type": "long"
}
}
}
}
通过分析数据发现,并不是所有的数据都有metadata.exchange_rate字段,猜测可能是认为初始化数据时,将metadata.exchange_rate 设置了值。但没有设置到mapping.
3、解决
将有改字段的数据删除掉
{
"script": {
"source": "ctx._source.remove('metadata.exchange_rate')"
},
"query": {
"match_all": {
}
}
}