You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用Elasticsearch 8.x执行kNN查询遇parsing_exception错误求助

问题原因

你遇到的parsing_exception Unknown key for a START_ARRAY in [knn]错误,是因为Elasticsearch 8.x系列的Python客户端要求knn字段的值必须是数组类型,而非单个对象。尽管官方REST API示例允许单个knn查询对象,但Python客户端的序列化逻辑会将单个对象解析成不符合ES服务端期望的结构,从而触发报错。

修复后的代码

只需把body里的knn字段改成数组形式,包裹住原查询对象即可:

mappings= {
    "properties": {
      "image-vector": {
        "type": "dense_vector",
        "dims": 3,
        "index": True,
        "similarity": "l2_norm"
      },
      "title-vector": {
        "type": "dense_vector",
        "dims": 5,
        "index": True,
        "similarity": "l2_norm"
      },
      "title": {
        "type": "text"
      },
      "file-type": {
        "type": "keyword"
      }
    }
  }

# 核心修复:将knn单个对象改为数组包裹的形式
body = {
   "knn": [
     {
       "field": "image-vector",
       "query_vector": [-5, 9, -12],
       "k": 10,
       "num_candidates": 100
     }
   ],
   "fields": [ "title", "file-type" ]
 }
client.search(index='db-test', body=body)

额外说明

如果需要执行多维度kNN查询(比如同时匹配image-vector和title-vector),直接在knn数组中添加对应查询对象即可,这也是Elasticsearch 8.x原生支持的特性。

内容的提问来源于stack exchange,提问作者santasoda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:46:26