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

Reply via email to