Elasticsearch嵌套dense_vector余弦相似度查询报Required [query]错误如何解决
排查解决思路
直接报错原因
script_score 查询语法要求必须包含一个基础query子句,你当前的写法缺失了该必填参数,这是触发Required [query]错误的核心原因。
其他隐藏问题
- 字段名不匹配:你的mapping中dense_vector字段名为
doc_vector,但查询脚本中写的是vector,字段对应错误会导致后续查询即使修复语法也取不到值。 - nested上下文字段访问格式错误:nested查询内不能直接通过
document_vectors.xxx的方式访问字段,需要使用doc['<字段全路径>']的格式取值。 - 相似度分数兼容问题:cosineSimilarity的返回值范围为[-1,1],最好做偏移处理避免负分影响排序逻辑。
修正后的查询语句
{ "size": results_size, "query": { "nested": { "path": "document_vectors", "score_mode": "max", "query": { "script_score": { "query": { "match_all": {} }, "script": { "source": "doc['document_vectors.doc_vector'].size() == 0 ? 0 : cosineSimilarity(params.query_vector, 'document_vectors.doc_vector') + 1.0", "params": {"query_vector": query_vector} } } } } } }
额外验证点
- 确保传入的
query_vector维度与mapping中配置的768维完全一致 - 如使用Elasticsearch 8.x版本,可直接使用
knn查询语法替代script_score实现更高性能的向量检索
内容的提问来源于stack exchange,提问作者zcleghern
相关产品推荐
相关产品推荐

