📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

版本: 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);