Skip to content

Commit

Permalink
Set analyzer to regex query string search (opensearch-project#3967) (o…
Browse files Browse the repository at this point in the history
…pensearch-project#4220)

Sets analyzer to regex query string search

Signed-off-by: yyyogev <[email protected]>
(cherry picked from commit ea4cfcc)

Signed-off-by: Daniel (dB.) Doubrovkine <[email protected]>

Signed-off-by: Daniel (dB.) Doubrovkine <[email protected]>
Co-authored-by: Yogev Mets <[email protected]>
  • Loading branch information
opensearch-trigger-bot[bot] and yyyogev authored Sep 6, 2022
1 parent 362d489 commit 44c5eff
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ setup:
id: 1
body: { text: some short words with a stupendously long one }

- do:
index:
index: test
id: 2
body: { text: sentence with UPPERCASE WORDS }

- do:
indices.refresh:
index: [test]
Expand Down Expand Up @@ -83,6 +89,22 @@ setup:
- match: {hits.max_score: 1}
- match: {hits.hits.0._score: 1}

---
"search with uppercase regex":
- do:
search:
rest_total_hits_as_int: true
index: test
body:
query:
query_string:
default_field: text
query: /UPPERCASE/

- match: {hits.total: 1}
- match: {hits.max_score: 1}
- match: {hits.hits.0._score: 1}

---
"search index prefixes with span_multi":
- skip:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@
import org.apache.lucene.search.spans.SpanOrQuery;
import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.automaton.RegExp;
import org.opensearch.common.lucene.search.Queries;
import org.opensearch.common.regex.Regex;
import org.opensearch.common.unit.Fuzziness;
Expand Down Expand Up @@ -562,7 +561,7 @@ private Query getPrefixQuerySingle(String field, String termStr) throws ParseExc
if (currentFieldType == null || currentFieldType.getTextSearchInfo() == TextSearchInfo.NONE) {
return newUnmappedFieldQuery(field);
}
setAnalyzer(forceAnalyzer == null ? queryBuilder.context.getSearchAnalyzer(currentFieldType) : forceAnalyzer);
setAnalyzer(getSearchAnalyzer(currentFieldType));
Query query = null;
if (currentFieldType.getTextSearchInfo().isTokenized() == false) {
query = currentFieldType.prefixQuery(termStr, getMultiTermRewriteMethod(), context);
Expand Down Expand Up @@ -738,6 +737,13 @@ private Query getWildcardQuerySingle(String field, String termStr) throws ParseE
}
}

private Analyzer getSearchAnalyzer(MappedFieldType currentFieldType) {
if (forceAnalyzer == null) {
return queryBuilder.context.getSearchAnalyzer(currentFieldType);
}
return forceAnalyzer;
}

@Override
protected Query getRegexpQuery(String field, String termStr) throws ParseException {
final int maxAllowedRegexLength = context.getIndexSettings().getMaxRegexLength();
Expand Down Expand Up @@ -778,11 +784,8 @@ private Query getRegexpQuerySingle(String field, String termStr) throws ParseExc
if (currentFieldType == null) {
return newUnmappedFieldQuery(field);
}
if (forceAnalyzer != null) {
setAnalyzer(forceAnalyzer);
return super.getRegexpQuery(field, termStr);
}
return currentFieldType.regexpQuery(termStr, RegExp.ALL, 0, getDeterminizeWorkLimit(), getMultiTermRewriteMethod(), context);
setAnalyzer(getSearchAnalyzer(currentFieldType));
return super.getRegexpQuery(field, termStr);
} catch (RuntimeException e) {
if (lenient) {
return newLenientFieldQuery(field, e);
Expand Down

0 comments on commit 44c5eff

Please sign in to comment.