Elasticsearch使用script_score报does not support [query]错如何解决
报错原因
你混淆了Elasticsearch中两种script_score的用法:
- 作为独立查询类型的
script_score支持配置query字段,用于限定计算评分的文档范围 - 作为
function_score下functions数组内的评分函数时,script_score仅支持配置script字段,不支持query参数,你当前场景属于第二种用法,因此触发解析错误。
解决方案
你原本的逻辑是命中对应title关键词时,才累加对应参数计算的自定义分值,只需要调整functions数组内的配置结构:将原本写在script_score内的query字段提取出来,作为当前function同级的filter触发条件即可。
修正后的核心配置示例如下:
"functions": [ { "weight": 0 }, { "filter": { "term": { "title": "jordan" } }, "script_score": { "script": { "source": "params.termFreq * Math.log10((params.doCount - (params.allDocFreq * params.numDocs/params.maxDocs) + 1) / (params.allDocFreq * params.numDocs/params.maxDocs)) / Math.log10(1 + params.doCount) * 1000 /5", "params": { "termFreq": 1278, "titleDocFreq": 1274, "allDocFreq": 3630, "doCount": 3909828, "numDocs": 4492778, "maxDocs": 4497180 } } } }, // 剩余faithful、return、pray、mosques四个关键词的配置均按上述格式调整即可 ]
调整后即可正常执行,原有评分逻辑、sum累加规则、boost_mode配置都不需要修改。
内容的提问来源于stack exchange,提问作者EdZ
相关产品推荐
相关产品推荐

