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
相关产品推荐
相关产品推荐

