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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]