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]