From 3efbfa1d3f8d068a0427fa2ea9cb3db3918117d6 Mon Sep 17 00:00:00 2001 From: Isha Gupta Date: Wed, 1 Oct 2025 11:57:48 +0530 Subject: [PATCH] Fix issue with case-insensitive + wildcard + aggregration query\n\nSigned-off-by: Isha Gupta Signed-off-by: Isha Gupta --- .../common/lucene/search/AutomatonQueries.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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); } /**