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

Elasticsearch BadRequestError报错咨询:unknown query [query]问题排查

问题解决:Elasticsearch parsing_exception 未知查询[query]

错误原因

你的代码错误出在es.search()的参数传递逻辑上:
你构造的query字典已经包含了顶层的"query"和"size"字段,但调用es.search()时又将这个完整字典传给了query=参数,导致最终发送给Elasticsearch的请求出现了两层嵌套的"query"字段,触发了parsing_exception解析错误。

修正方案

根据你使用的Elasticsearch Python客户端版本,选择以下两种方式之一:

方式1:适配旧版客户端(使用body参数)

直接将构造好的完整请求体传给body参数,而非query参数:

top_k=3
query = {
    "query": {
        "script_score": {
            "query": {
                "match_all": {}
            },
            "script": {
                "source": "cosineSimilarity(params.query_vector, 'ask_vector') + 1.0",
                "lang": "painless",
                "params": {
                    "query_vector": query_embedding.tolist()
                }
            }
        }
    },
    "size": top_k
}
# 把query传给body参数
res = es.search(index=index_name, body=query)

方式2:适配新版客户端(推荐,拆分独立参数)

新版客户端(7.x及以上)支持将查询条件、分页大小等作为独立参数传递,无需包裹在顶层字典中:

top_k=3
# 只构造script_score查询部分
search_query = {
    "script_score": {
        "query": {
            "match_all": {}
        },
        "script": {
            "source": "cosineSimilarity(params.query_vector, 'ask_vector') + 1.0",
            "lang": "painless",
            "params": {
                "query_vector": query_embedding.tolist()
            }
        }
    }
}
# 分别传递query和size参数
res = es.search(index=index_name, query=search_query, size=top_k)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:05:05