什么,es 查询返回了重复的字段导致DBeaver 报错 Multiple values

61 阅读1分钟

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": {
        }
    }
}