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