--- title: "Script score 查询无法执行时 - 如何解决此 Elasticsearch 异常" date: 2026-01-13 lastmod: 2026-01-13 description: "Elasticsearch 脚本评分查询执行异常的解决方案与原因分析" tags: ["脚本评分查询", "动态脚本", "查询异常", "Elasticsearch安全"] summary: "版本: 7.7-7.15 简而言之,当 script.disable_dynamic 设置为 true 时尝试执行"脚本评分"查询会出现此错误。此设置会禁用 Elasticsearch 中的动态脚本,而"脚本评分"查询需要使用动态脚本。要解决此问题,您可以将 script.disable_dynamic 设置为 false,或者改用静态脚本。但请注意,启用动态脚本可能会带来安全风险,因此建议尽可能使用静态脚本。 日志上下文 # 日志 “[script score] queries cannot be executed when ‘” 的类名是 ScriptScoreQueryBuilder.java。我们从 Elasticsearch 源代码中提取了以下内容,供那些需要深入理解上下文的用户参考: } @Override protected Query doToQuery(SearchExecutionContext context) throws IOException { if (context.allowExpensiveQueries() == false) { throw new ElasticsearchException("[script score] queries cannot be executed when '" + ALLOW_EXPENSIVE_QUERIES.getKey() + "' is set to false."); } ScoreScript.Factory factory = context.compile(script; ScoreScript.CONTEXT); SearchLookup lookup = context." --- > **版本:** 7.7-7.15 简而言之,当 `script.disable_dynamic` 设置为 true 时尝试执行"脚本评分"查询会出现此错误。此设置会禁用 Elasticsearch 中的动态脚本,而"脚本评分"查询需要使用动态脚本。要解决此问题,您可以将 `script.disable_dynamic` 设置为 false,或者改用静态脚本。但请注意,启用动态脚本可能会带来安全风险,因此建议尽可能使用静态脚本。 ## 日志上下文 日志 "[script score] queries cannot be executed when '" 的类名是 [ScriptScoreQueryBuilder.java](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/)。我们从 Elasticsearch 源代码中提取了以下内容,供那些需要深入理解上下文的用户参考: ```java } @Override protected Query doToQuery(SearchExecutionContext context) throws IOException { if (context.allowExpensiveQueries() == false) { throw new ElasticsearchException("[script score] queries cannot be executed when '" + ALLOW_EXPENSIVE_QUERIES.getKey() + "' is set to false."); } ScoreScript.Factory factory = context.compile(script; ScoreScript.CONTEXT); SearchLookup lookup = context.lookup(); ScoreScript.LeafFactory scoreScriptFactory = factory.newFactory(script.getParams(); lookup); ```