This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch JAMES-4057-enhancement-1 in repository https://gitbox.apache.org/repos/asf/james-project.git
commit c404c0fb812281fe5e1738b01e19e5993cb8da07 Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Tue May 27 11:21:12 2025 +0200 JAMES-4057 Use Query string only when control character are used --- .../apache/james/mailbox/opensearch/query/CriterionConverter.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java index a85a1c050b..4e816ff1e5 100644 --- a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java +++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java @@ -31,6 +31,7 @@ import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Stream; +import com.google.common.base.CharMatcher; import jakarta.inject.Inject; import jakarta.mail.Flags; @@ -59,6 +60,7 @@ import com.google.common.collect.ImmutableList; public class CriterionConverter { + public static final CharMatcher QUERY_STRING_CONTROL_CHAR = CharMatcher.anyOf("()\"~-|*"); private final Map<Class<?>, Function<Criterion, Query>> criterionConverterMap; private final Map<Class<?>, BiFunction<String, HeaderOperator, Query>> headerOperatorConverterMap; private final String textFuzzinessSearchValue; @@ -224,7 +226,7 @@ public class CriterionConverter { private Query convertTextCriterion(SearchQuery.TextCriterion textCriterion) { switch (textCriterion.getType()) { case BODY: - if (useQueryStringQuery) { + if (useQueryStringQuery && QUERY_STRING_CONTROL_CHAR.matchesAnyOf(textCriterion.getOperator().getValue())) { return new SimpleQueryStringQuery.Builder() .fields(ImmutableList.of(JsonMessageConstants.TEXT_BODY, JsonMessageConstants.HTML_BODY)) .query(textCriterion.getOperator().getValue()) @@ -249,7 +251,7 @@ public class CriterionConverter { .toQuery(); } case FULL: - if (useQueryStringQuery) { + if (useQueryStringQuery && QUERY_STRING_CONTROL_CHAR.matchesAnyOf(textCriterion.getOperator().getValue())) { return new SimpleQueryStringQuery.Builder() .fields(ImmutableList.of(JsonMessageConstants.TEXT_BODY, JsonMessageConstants.HTML_BODY, JsonMessageConstants.ATTACHMENTS + "." + JsonMessageConstants.Attachment.TEXT_CONTENT)) .query(textCriterion.getOperator().getValue()) @@ -493,7 +495,7 @@ public class CriterionConverter { } private Query convertSubject(SearchQuery.SubjectCriterion headerCriterion) { - if (useQueryStringQuery) { + if (useQueryStringQuery && QUERY_STRING_CONTROL_CHAR.matchesAnyOf(headerCriterion.getSubject())) { return new QueryStringQuery.Builder() .fields(ImmutableList.of(JsonMessageConstants.SUBJECT)) .query(headerCriterion.getSubject()) --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org