版本: 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.getKey() + "' is set to false.");
}
failIfNotIndexed();
RegexpQuery query = new RegexpQuery(new Term(name(); indexedValueForSearch(value)); syntaxFlags;
matchFlags; maxDeterminizedStates);





