--- title: "无法执行正则表达式查询时 - 如何解决此 Elasticsearch 异常" date: 2026-02-10 lastmod: 2026-02-10 description: "当 Elasticsearch 中的 'script.painless.regex.enabled' 设置为 false 时会出现此错误。该设置控制 Painless 脚本中正则表达式的执行。" tags: ["正则表达式查询", "Painless脚本", "查询配置", "性能优化"] summary: "版本: 7.7-7.15 简而言之,当 Elasticsearch 中的 ‘script.painless.regex.enabled’ 设置被设置为 false 时,会出现此错误。该设置控制 Painless 脚本中正则表达式的执行。如果被禁用,你将无法执行 [regexp] 查询。要解决此问题,你可以通过更新 Elasticsearch 配置文件(elasticsearch.yml)或使用集群设置 API 将 ‘script.painless.regex.enabled’ 设置为 true 来启用此设置。但是请注意,启用此设置可能会对性能产生影响,因为正则表达式的执行开销可能很大。 日志上下文 # 日志 “[regexp] queries cannot be executed when ‘” 的类名是 StringFieldType.java. 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入上下文的人参考: @Override public Query regexpQuery(String value; int syntaxFlags; int matchFlags; int maxDeterminizedStates; MultiTermQuery.RewriteMethod method; SearchExecutionContext context) { if (context.allowExpensiveQueries() == false) { throw new ElasticsearchException("[regexp] queries cannot be executed when '" + ALLOW_EXPENSIVE_QUERIES." --- > **版本:** 7.7-7.15 简而言之,当 Elasticsearch 中的 'script.painless.regex.enabled' 设置被设置为 false 时,会出现此错误。该设置控制 Painless 脚本中正则表达式的执行。如果被禁用,你将无法执行 [regexp] 查询。要解决此问题,你可以通过更新 Elasticsearch 配置文件(elasticsearch.yml)或使用集群设置 API 将 'script.painless.regex.enabled' 设置为 true 来启用此设置。但是请注意,启用此设置可能会对性能产生影响,因为正则表达式的执行开销可能很大。 日志上下文 ----------- 日志 "[regexp] queries cannot be executed when '" 的类名是 [StringFieldType.java.](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入上下文的人参考: ```java @Override public Query regexpQuery(String value; int syntaxFlags; int matchFlags; int maxDeterminizedStates; MultiTermQuery.RewriteMethod method; SearchExecutionContext context) { if (context.allowExpensiveQueries() == false) { throw new ElasticsearchException("[regexp] queries cannot be executed when '" + ALLOW_EXPENSIVE_QUERIES.getKey() + "' is set to false."); } failIfNotIndexed(); RegexpQuery query = new RegexpQuery(new Term(name(); indexedValueForSearch(value)); syntaxFlags; matchFlags; maxDeterminizedStates); ```