diff --git a/server/src/main/java/org/opensearch/common/lucene/search/AutomatonQueries.java b/server/src/main/java/org/opensearch/common/lucene/search/AutomatonQueries.java index fa1d88a3a6537..2b45d961ddc87 100644 --- a/server/src/main/java/org/opensearch/common/lucene/search/AutomatonQueries.java +++ b/server/src/main/java/org/opensearch/common/lucene/search/AutomatonQueries.java @@ -39,6 +39,7 @@ import org.apache.lucene.util.automaton.Automata; import org.apache.lucene.util.automaton.Automaton; import org.apache.lucene.util.automaton.Operations; +import org.apache.lucene.util.automaton.TooComplexToDeterminizeException; import java.util.ArrayList; import java.util.Arrays; @@ -92,7 +93,14 @@ public static AutomatonQuery caseInsensitiveTermQuery(Term term) { * Build an automaton matching a wildcard pattern, ASCII case insensitive, if the method is null, then will use {@link MultiTermQuery#CONSTANT_SCORE_BLENDED_REWRITE}. */ public static AutomatonQuery caseInsensitiveWildcardQuery(Term wildcardquery, MultiTermQuery.RewriteMethod method) { - return createAutomatonQuery(wildcardquery, toCaseInsensitiveWildcardAutomaton(wildcardquery), method); + Automaton automaton = toCaseInsensitiveWildcardAutomaton(wildcardquery); + try { + automaton = Operations.determinize(automaton, Operations.DEFAULT_DETERMINIZE_WORK_LIMIT); + } catch (TooComplexToDeterminizeException e) { + throw new RuntimeException("Wildcard query too complex to determinize for term: " + wildcardquery, e); + } + assert automaton.isDeterministic(); + return createAutomatonQuery(wildcardquery, automaton, method); } /**