This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 5aadfaf30b95823bdf95fe40eb67a6513f835592
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Tue Sep 16 22:36:41 2025 +0200

    JAMES-4057 Align attachments to query string management
---
 .../query/DefaultCriterionConverter.java           | 40 ++++++++++++++--------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/DefaultCriterionConverter.java
 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/DefaultCriterionConverter.java
index 0c8f56f15f..f81154a3d9 100644
--- 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/DefaultCriterionConverter.java
+++ 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/DefaultCriterionConverter.java
@@ -297,7 +297,7 @@ public class DefaultCriterionConverter implements 
CriterionConverter {
                         .toQuery();
                 }
             case ATTACHMENTS:
-                if (useQueryStringQuery) {
+                if (useQueryStringQuery && 
QUERY_STRING_CONTROL_CHAR.matchesAnyOf(textCriterion.getOperator().getValue())) 
{
                     return new BoolQuery.Builder()
                         .should(new SimpleQueryStringQuery.Builder()
                             
.fields(ImmutableList.of(JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.TEXT_CONTENT))
@@ -330,21 +330,33 @@ public class DefaultCriterionConverter implements 
CriterionConverter {
                         .toQuery();
                 }
             case ATTACHMENT_FILE_NAME:
-                return new BoolQuery.Builder()
-                    .should(new MatchQuery.Builder()
-                        .field(JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.FILENAME)
-                        .query(new 
FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
-                        .fuzziness(textFuzzinessSearchValue)
-                        .operator(Operator.And)
+                if (useQueryStringQuery && 
QUERY_STRING_CONTROL_CHAR.matchesAnyOf(textCriterion.getOperator().getValue())) 
{
+                    return new BoolQuery.Builder()
+                        .should(new SimpleQueryStringQuery.Builder()
+                            
.fields(ImmutableList.of(JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.FILENAME))
+                            .query(textCriterion.getOperator().getValue())
+                            .defaultOperator(Operator.And)
+                            .lenient(true)
+                            .build().toQuery())
                         .build()
-                        .toQuery())
-                    .should(new TermQuery.Builder()
-                        .field(JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.FILE_EXTENSION)
-                        .value(new 
FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
+                        .toQuery();
+                } else {
+                    return new BoolQuery.Builder()
+                        .should(new MatchQuery.Builder()
+                            .field(JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.FILENAME)
+                            .query(new 
FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
+                            .fuzziness(textFuzzinessSearchValue)
+                            .operator(Operator.And)
+                            .build()
+                            .toQuery())
+                        .should(new TermQuery.Builder()
+                            .field(JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.FILE_EXTENSION)
+                            .value(new 
FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
+                            .build()
+                            .toQuery())
                         .build()
-                        .toQuery())
-                    .build()
-                    .toQuery();
+                        .toQuery();
+                }
             default:
                 throw new RuntimeException("Unknown SCOPE for text criterion");
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to