本文详解 elasticsearch python 客户端中 `reindex` 方法的正确调用方式,指出常见参数误用导致的 `badrequesterror` 错误,并提供符合官方 api 规范的结构化请求示例与关键注意事项。
在使用 elasticsearch-py 客户端执行跨索引数据迁移(即重索引)时,一个典型误区是将 source 和 dest 直接作为函数关键字参数传入 reindex() 方法。如以下错误写法:
es_client.reindex(source='transcripts', dest='transcript_sent') # ❌ 错误:参数格式不合法
这会触发 BadRequestError(400, ‘x_content_parse_exception’, “[1:9] [reindex] dest doesn’t support values of type: VALUE_STRING”) —— 原因在于:Elasticsearch 的 _reindex API 要求整个请求体(request body)是一个 JSON 对象,其中 source 和 dest 必须是嵌套对象(而非字符串),而旧版客户端(v7.x+)已不再支持扁平化参数形式。
✅ 正确做法是通过 body 参数传入符合 REST API 规范的字典结构: