修复 ElasticSearch 'Unknown key for a START_ARRAY in [...].'

当你收到类似这样的错误消息

elasticsearch_unknown_key.txt
elasticsearch.exceptions.RequestError: RequestError(400, 'parsing_exception', 'Unknown key for a START_ARRAY in [size].')

在 ElasticSearch 中,查找 [方括号] 中的值。在我们的示例中这是 [size]

你的查询包含该键的数组,但不允许使用数组。

例如,此查询格式不正确:

es_size_array_incorrect.json
{
    "size": [10, 11]
}

因为 size 接受数字,而不是数组。

在 Python 中,如果你以编程方式构建数组,你的行末可能有多余的逗号。

例如,如果你有类似这样的行

es_size_tuple_bug.py
query["size"] = 250,

这只是以下代码的语法糖

es_size_tuple_explicit.py
query["size"] = (250,)

即它将 size 设置为包含一个元素的元组。在 JSON 中这将导致

es_size_array_json.json
{
    "size": [250]
}

为了修复此问题,从行末删除逗号

es_size_fix.py
query["size"] = 250

这将产生正确的查询 JSON

es_size_correct.json
{
    "size": 250
}

Check out similar posts by category: Databases, ElasticSearch