Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/changelog/137536.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pr: 137536
summary: Use DV rewrites where possible in Keyword queries
area: Search
type: enhancement
issues: []
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,12 @@
import org.apache.lucene.index.Term;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.search.MultiTermQuery;
import org.apache.lucene.search.PrefixQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.RegexpQuery;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.automaton.Automata;
import org.apache.lucene.util.automaton.Automaton;
Expand Down Expand Up @@ -67,9 +71,7 @@
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
import org.elasticsearch.search.lookup.FieldValues;
import org.elasticsearch.search.lookup.SearchLookup;
import org.elasticsearch.search.runtime.StringScriptFieldFuzzyQuery;
import org.elasticsearch.search.runtime.StringScriptFieldPrefixQuery;
import org.elasticsearch.search.runtime.StringScriptFieldRegexpQuery;
import org.elasticsearch.search.runtime.StringScriptFieldTermQuery;
import org.elasticsearch.search.runtime.StringScriptFieldWildcardQuery;
import org.elasticsearch.xcontent.Text;
Expand Down Expand Up @@ -720,14 +722,13 @@ public Query fuzzyQuery(
if (indexType.hasTerms()) {
return super.fuzzyQuery(value, fuzziness, prefixLength, maxExpansions, transpositions, context, rewriteMethod);
} else {
return StringScriptFieldFuzzyQuery.build(
new Script(""),
ctx -> new SortedSetDocValuesStringFieldScript(name(), context.lookup(), ctx),
name(),
indexedValueForSearch(value).utf8ToString(),
return new FuzzyQuery(
new Term(name(), indexedValueForSearch(value)),
fuzziness.asDistance(BytesRefs.toString(value)),
prefixLength,
transpositions
maxExpansions,
transpositions,
MultiTermQuery.DOC_VALUES_REWRITE
);
}
}
Expand All @@ -743,6 +744,10 @@ public Query prefixQuery(
if (indexType.hasTerms()) {
return super.prefixQuery(value, method, caseInsensitive, context);
} else {
if (caseInsensitive == false) {
Term prefix = new Term(name(), indexedValueForSearch(value));
return new PrefixQuery(prefix, MultiTermQuery.DOC_VALUES_REWRITE);
}
return new StringScriptFieldPrefixQuery(
new Script(""),
ctx -> new SortedSetDocValuesStringFieldScript(name(), context.lookup(), ctx),
Expand Down Expand Up @@ -1017,6 +1022,10 @@ public Query wildcardQuery(
} else {
value = indexedValueForSearch(value).utf8ToString();
}
if (caseInsensitive == false) {
Term term = new Term(name(), value);
return new WildcardQuery(term, Operations.DEFAULT_DETERMINIZE_WORK_LIMIT, MultiTermQuery.DOC_VALUES_REWRITE);
}
return new StringScriptFieldWildcardQuery(
new Script(""),
ctx -> new SortedSetDocValuesStringFieldScript(name(), context.lookup(), ctx),
Expand All @@ -1038,13 +1047,8 @@ public Query normalizedWildcardQuery(String value, MultiTermQuery.RewriteMethod
} else {
value = indexedValueForSearch(value).utf8ToString();
}
return new StringScriptFieldWildcardQuery(
new Script(""),
ctx -> new SortedSetDocValuesStringFieldScript(name(), context.lookup(), ctx),
name(),
value,
false
);
Term term = new Term(name(), value);
return new WildcardQuery(term, Operations.DEFAULT_DETERMINIZE_WORK_LIMIT, MultiTermQuery.DOC_VALUES_REWRITE);
}
}

Expand All @@ -1064,14 +1068,13 @@ public Query regexpQuery(
if (matchFlags != 0) {
throw new IllegalArgumentException("Match flags not yet implemented [" + matchFlags + "]");
}
return new StringScriptFieldRegexpQuery(
new Script(""),
ctx -> new SortedSetDocValuesStringFieldScript(name(), context.lookup(), ctx),
name(),
indexedValueForSearch(value).utf8ToString(),
return new RegexpQuery(
new Term(name(), indexedValueForSearch(value)),
syntaxFlags,
matchFlags,
maxDeterminizedStates
RegexpQuery.DEFAULT_PROVIDER,
maxDeterminizedStates,
MultiTermQuery.DOC_VALUES_REWRITE
);
}
}
Expand Down