Skip to content

Commit c03d2fe

Browse files
authored
JAMES-4057 Use Query string only when control character are used (#2730)
1 parent 70d3182 commit c03d2fe

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,12 @@
5555
import org.opensearch.client.opensearch._types.query_dsl.TermQuery;
5656

5757
import com.google.common.annotations.VisibleForTesting;
58+
import com.google.common.base.CharMatcher;
5859
import com.google.common.collect.ImmutableList;
5960

6061
public class CriterionConverter {
6162

63+
public static final CharMatcher QUERY_STRING_CONTROL_CHAR = CharMatcher.anyOf("()\"~-|*");
6264
private final Map<Class<?>, Function<Criterion, Query>> criterionConverterMap;
6365
private final Map<Class<?>, BiFunction<String, HeaderOperator, Query>> headerOperatorConverterMap;
6466
private final String textFuzzinessSearchValue;
@@ -224,7 +226,7 @@ private Query convertCustomFlagCriterion(SearchQuery.CustomFlagCriterion criteri
224226
private Query convertTextCriterion(SearchQuery.TextCriterion textCriterion) {
225227
switch (textCriterion.getType()) {
226228
case BODY:
227-
if (useQueryStringQuery) {
229+
if (useQueryStringQuery && QUERY_STRING_CONTROL_CHAR.matchesAnyOf(textCriterion.getOperator().getValue())) {
228230
return new SimpleQueryStringQuery.Builder()
229231
.fields(ImmutableList.of(JsonMessageConstants.TEXT_BODY, JsonMessageConstants.HTML_BODY))
230232
.query(textCriterion.getOperator().getValue())
@@ -249,7 +251,7 @@ private Query convertTextCriterion(SearchQuery.TextCriterion textCriterion) {
249251
.toQuery();
250252
}
251253
case FULL:
252-
if (useQueryStringQuery) {
254+
if (useQueryStringQuery && QUERY_STRING_CONTROL_CHAR.matchesAnyOf(textCriterion.getOperator().getValue())) {
253255
return new SimpleQueryStringQuery.Builder()
254256
.fields(ImmutableList.of(JsonMessageConstants.TEXT_BODY, JsonMessageConstants.HTML_BODY, JsonMessageConstants.ATTACHMENTS + "." + JsonMessageConstants.Attachment.TEXT_CONTENT))
255257
.query(textCriterion.getOperator().getValue())
@@ -493,7 +495,7 @@ private Query convertHeader(SearchQuery.HeaderCriterion headerCriterion) {
493495
}
494496

495497
private Query convertSubject(SearchQuery.SubjectCriterion headerCriterion) {
496-
if (useQueryStringQuery) {
498+
if (useQueryStringQuery && QUERY_STRING_CONTROL_CHAR.matchesAnyOf(headerCriterion.getSubject())) {
497499
return new QueryStringQuery.Builder()
498500
.fields(ImmutableList.of(JsonMessageConstants.SUBJECT))
499501
.query(headerCriterion.getSubject())

0 commit comments

Comments
 (0)