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

rcordier 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 4711379766 JAMES-3963 Full text search: AND for combining phrase terms 
(#1810)
4711379766 is described below

commit 47113797665961b88464ff551bf26a20a83de36d
Author: Benoit TELLIER <[email protected]>
AuthorDate: Mon Nov 27 05:27:18 2023 +0100

    JAMES-3963 Full text search: AND for combining phrase terms (#1810)
---
 .../search/LuceneMessageSearchIndexTest.java       |  7 +---
 .../opensearch/query/CriterionConverter.java       | 11 +++++-
 .../store/search/SimpleMessageSearchIndexTest.java |  7 +---
 .../search/AbstractMessageSearchIndexTest.java     | 44 ++++++++++++----------
 4 files changed, 37 insertions(+), 32 deletions(-)

diff --git 
a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
 
b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
index 66e0741ac4..46c39efb16 100644
--- 
a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
+++ 
b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
@@ -135,12 +135,7 @@ class LuceneMessageSearchIndexTest extends 
AbstractMessageSearchIndexTest {
 
     @Disabled("JAMES-1799: ignoring failing test after generalizing OpenSearch 
test suite to other mailbox search backends")
     @Override
-    public void 
bodyContainsShouldReturnUidOfMessageContainingTheApproximativeText() {
-    }
-
-    @Disabled("JAMES-1799: ignoring failing test after generalizing OpenSearch 
test suite to other mailbox search backends")
-    @Override
-    public void 
mailsContainsShouldIncludeMailHavingAttachmentsMatchingTheRequest() {
+    public void bodyContainsShouldReturnUidOfMessageContainingBothTerms() {
     }
 
     @Disabled("Domain part search is not supported by Lucene")
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 5b76063a77..2ddaf0bf97 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
@@ -44,6 +44,7 @@ import 
org.opensearch.client.opensearch._types.query_dsl.ChildScoreMode;
 import org.opensearch.client.opensearch._types.query_dsl.MatchAllQuery;
 import org.opensearch.client.opensearch._types.query_dsl.MatchQuery;
 import org.opensearch.client.opensearch._types.query_dsl.NestedQuery;
+import org.opensearch.client.opensearch._types.query_dsl.Operator;
 import org.opensearch.client.opensearch._types.query_dsl.Query;
 import org.opensearch.client.opensearch._types.query_dsl.RangeQuery;
 import org.opensearch.client.opensearch._types.query_dsl.TermQuery;
@@ -196,11 +197,13 @@ public class CriterionConverter {
                 .should(new MatchQuery.Builder()
                     .field(JsonMessageConstants.TEXT_BODY)
                     .query(new 
FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
+                    .operator(Operator.And)
                     .build()
                     ._toQuery())
                 .should(new MatchQuery.Builder()
                     .field(JsonMessageConstants.HTML_BODY)
                     .query(new 
FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
+                    .operator(Operator.And)
                     .build()
                     ._toQuery())
                 .build()
@@ -210,16 +213,19 @@ public class CriterionConverter {
                 .should(new MatchQuery.Builder()
                     .field(JsonMessageConstants.TEXT_BODY)
                     .query(new 
FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
+                    .operator(Operator.And)
                     .build()
                     ._toQuery())
                 .should(new MatchQuery.Builder()
                     .field(JsonMessageConstants.HTML_BODY)
                     .query(new 
FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
+                    .operator(Operator.And)
                     .build()
                     ._toQuery())
                 .should(new MatchQuery.Builder()
                     .field(JsonMessageConstants.ATTACHMENTS + "." + 
JsonMessageConstants.Attachment.TEXT_CONTENT)
                     .query(new 
FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
+                    .operator(Operator.And)
                     .build()
                     ._toQuery())
                 .build()
@@ -428,7 +434,10 @@ public class CriterionConverter {
     private Query convertSubject(SearchQuery.SubjectCriterion headerCriterion) 
{
         return new MatchQuery.Builder()
             .field(JsonMessageConstants.SUBJECT)
-            .query(new 
FieldValue.Builder().stringValue(headerCriterion.getSubject()).build())
+            .query(new FieldValue.Builder()
+                .stringValue(headerCriterion.getSubject())
+                .build())
+            .operator(Operator.And)
             .build()
             ._toQuery();
     }
diff --git 
a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
 
b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
index 0e36139300..498124dd47 100644
--- 
a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
+++ 
b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
@@ -164,7 +164,7 @@ class SimpleMessageSearchIndexTest extends 
AbstractMessageSearchIndexTest {
 
     @Disabled("JAMES-1799: ignoring failing test after generalizing OpenSearch 
test suite to other mailbox search backends")
     @Override
-    public void 
bodyContainsShouldReturnUidOfMessageContainingTheApproximativeText() {
+    public void bodyContainsShouldReturnUidOfMessageContainingBothTerms() {
     }
 
     @Disabled("JAMES-1799: ignoring failing test after generalizing OpenSearch 
test suite to other mailbox search backends")
@@ -192,11 +192,6 @@ class SimpleMessageSearchIndexTest extends 
AbstractMessageSearchIndexTest {
     public void headerDateAfterShouldWork() {
     }
 
-    @Disabled("JAMES-1799: ignoring failing test after generalizing OpenSearch 
test suite to other mailbox search backends")
-    @Override
-    public void 
mailsContainsShouldIncludeMailHavingAttachmentsMatchingTheRequest() {
-    }
-
     @Disabled("JAMES-1799: ignoring failing test after generalizing OpenSearch 
test suite to other mailbox search backends")
     @Override
     public void sortOnSubjectShouldWork() {
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
index 5597f4a43e..d87e5725cf 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
@@ -460,13 +460,13 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    protected void 
bodyContainsShouldReturnUidOfMessageContainingTheApproximativeText() throws 
MailboxException {
+    protected void bodyContainsShouldReturnUidOfMessageContainingBothTerms() 
throws MailboxException {
         /* mail1.eml contains words created AND summary
            mail.eml contains created and thus matches the query with a low 
score */
         SearchQuery searchQuery = 
SearchQuery.of(SearchQuery.bodyContains("created summary"));
 
         assertThat(messageSearchIndex.search(session, mailbox, 
searchQuery).toStream())
-            .containsOnly(m2.getUid(), m8.getUid());
+            .containsOnly(m2.getUid());
     }
 
     @Test
@@ -551,6 +551,27 @@ public abstract class AbstractMessageSearchIndexTest {
             .containsOnly(messageId1.getUid());
     }
 
+    @Test
+    void subjectShouldMatchSubject() throws Exception {
+        
assertThat(Flux.from(inboxMessageManager.search(SearchQuery.of(SearchQuery.subject("JSON")),
 session)).toStream())
+            .containsOnly(m2.getUid());
+    }
+
+    @Test
+    void subjectShouldNotIncludeIrrelevantResults() throws Exception {
+        ComposedMessageId m = inboxMessageManager.appendMessage(
+            
ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml"),
+            new Date(1409608900000L),
+            session,
+            RECENT,
+            new Flags("Hello you")).getId();
+
+        awaitMessageCount(ImmutableList.of(), SearchQuery.matchAll(), 14);
+
+        
assertThat(Flux.from(inboxMessageManager.search(SearchQuery.of(SearchQuery.subject("Inline
 attachment")), session)).toStream())
+            .containsOnly(m.getUid());
+    }
+
     @Test
     void textShouldMatchEmailAddressLocalPart() throws Exception {
         MailboxPath mailboxPath = MailboxPath.forUser(USERNAME, INBOX);
@@ -1296,11 +1317,11 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    protected void 
mailsContainsShouldIncludeMailHavingAttachmentsMatchingTheRequest() throws 
Exception {
+    protected void 
mailsContainsShouldIncludeMailHavingAttachmentsMatchingAllTermsOfTheRequest() 
throws Exception {
         SearchQuery searchQuery = 
SearchQuery.of(SearchQuery.mailContains("root mailing list"));
 
         assertThat(messageSearchIndex.search(session, mailbox, 
searchQuery).toStream())
-            .containsOnly(m1.getUid(), m6.getUid());
+            .containsOnly(m1.getUid());
     }
 
     @Test
@@ -1408,21 +1429,6 @@ public abstract class AbstractMessageSearchIndexTest {
             .containsExactly(m2.getUid(), m3.getUid(), m4.getUid(), 
m5.getUid());
     }
 
-    @Test
-    void searchWithFullTextShouldReturnMailsWhenNotAPerfectMatch() throws 
Exception {
-        
assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.FullText));
-        ComposedMessageId messageWithBeautifulBananaAsTextAttachment = 
myFolderMessageManager.appendMessage(
-            MessageManager.AppendCommand.builder()
-            
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("eml/emailWithTextAttachment.eml")),
-            session).getId();
-        awaitMessageCount(ImmutableList.of(), SearchQuery.matchAll(), 14);
-
-        SearchQuery searchQuery = 
SearchQuery.of(SearchQuery.mailContains("User message banana"));
-
-        assertThat(messageSearchIndex.search(session, mailbox2, 
searchQuery).toStream())
-            
.containsExactly(messageWithBeautifulBananaAsTextAttachment.getUid());
-    }
-
     @Test
     void 
searchWithTextAttachmentShouldReturnMailsWhenAttachmentContentMatches() throws 
Exception {
         
assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Attachment));


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to