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


The following commit(s) were added to refs/heads/master by this push:
     new d6baa08d76 JAMES-4135 OpenSearch: make query string usage lenient
d6baa08d76 is described below

commit d6baa08d76f621bba61afa2e2e0198185d0e29e2
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Sun Sep 14 22:59:07 2025 +0200

    JAMES-4135 OpenSearch: make query string usage lenient
    
    Because a strict interpretation of the syntax result
    in user facing errors
---
 .../mailbox/opensearch/query/DefaultCriterionConverter.java |  3 +++
 .../james/mailbox/opensearch/OpenSearchQueryStringTest.java | 13 +++++++++++++
 2 files changed, 16 insertions(+)

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 762506374e..61376312be 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
@@ -229,6 +229,7 @@ public class DefaultCriterionConverter implements 
CriterionConverter {
                         
.fields(ImmutableList.of(JsonMessageConstants.TEXT_BODY, 
JsonMessageConstants.HTML_BODY))
                         .query(textCriterion.getOperator().getValue())
                         .defaultOperator(Operator.And)
+                        .lenient(true)
                         .build().toQuery();
                 } else {
                     return new BoolQuery.Builder()
@@ -256,6 +257,7 @@ public class DefaultCriterionConverter implements 
CriterionConverter {
                             
.fields(ImmutableList.of(JsonMessageConstants.TEXT_BODY, 
JsonMessageConstants.HTML_BODY, JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.TEXT_CONTENT))
                             .query(textCriterion.getOperator().getValue())
                             .defaultOperator(Operator.And)
+                            .lenient(true)
                             .build().toQuery())
                         .should(new TermQuery.Builder()
                             .field(JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.FILE_EXTENSION)
@@ -302,6 +304,7 @@ public class DefaultCriterionConverter implements 
CriterionConverter {
                             
.fields(ImmutableList.of(JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.TEXT_CONTENT))
                             .query(textCriterion.getOperator().getValue())
                             .defaultOperator(Operator.And)
+                            .lenient(true)
                             .build().toQuery())
                         .should(new TermQuery.Builder()
                             .field(JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.FILE_EXTENSION)
diff --git 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchQueryStringTest.java
 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchQueryStringTest.java
index e73cc4fc8d..8a74fab379 100644
--- 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchQueryStringTest.java
+++ 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchQueryStringTest.java
@@ -165,6 +165,19 @@ class OpenSearchQueryStringTest {
             .containsOnly(expectedId.getUid());
     }
 
+    @Test
+    void queryStringShouldBeLenient() throws Exception {
+        ComposedMessageId expectedId = addMessage(session, inboxPath, "Lucas 
love avocado banana smoothie").block();
+        addMessage(session, inboxPath, "Avocado grows in Mexico").block();
+
+        awaitForOpenSearch(QueryBuilders.matchAll().build().toQuery(), 2L);
+
+        SearchQuery searchQuery = 
SearchQuery.of(SearchQuery.bodyContains("love --avocado"));
+
+        assertThat(messageSearchIndex.search(session, mailbox, 
searchQuery).collectList().block())
+            .containsOnly(expectedId.getUid());
+    }
+
 
     private Mono<ComposedMessageId> addMessage(MailboxSession session, 
MailboxPath mailboxPath, String message) throws Exception {
         MessageManager messageManager = 
storeMailboxManager.getMailbox(mailboxPath, session);


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

Reply via email to