JAMES-2137 Introduce FullText search capability

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ad33cef8
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ad33cef8
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ad33cef8

Branch: refs/heads/master
Commit: ad33cef8f4ad0ac0feae8a4a323690871f1e311c
Parents: f319cd3
Author: Antoine Duprat <adup...@linagora.com>
Authored: Wed Sep 6 11:18:40 2017 +0200
Committer: Antoine Duprat <adup...@linagora.com>
Committed: Fri Sep 8 21:56:59 2017 +0200

----------------------------------------------------------------------
 .../apache/james/mailbox/MailboxManager.java    |  1 +
 ...lasticSearchListeningMessageSearchIndex.java |  2 +-
 .../search/SimpleMessageSearchIndexTest.java    |  9 ++---
 .../store/search/SimpleMessageSearchIndex.java  |  2 +-
 .../search/AbstractMessageSearchIndexTest.java  | 41 ++++++++++++++------
 .../james/JamesCapabilitiesServerTest.java      |  4 +-
 .../java/org/apache/james/jmap/JMAPModule.java  |  4 +-
 7 files changed, 40 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ad33cef8/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index f0b3eb1..0a34607 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -103,6 +103,7 @@ public interface MailboxManager extends RequestAware, 
MailboxListenerSupport {
          *  From, To, Cc, Bcc, Subjects, textBody & htmlBody
          */
         Text,
+        FullText,
         Attachment
     }
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad33cef8/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
index 34c0d2b..f36ffdb 100644
--- 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
@@ -78,7 +78,7 @@ public class ElasticSearchListeningMessageSearchIndex extends 
ListeningMessageSe
 
     @Override
     public EnumSet<SearchCapabilities> getSupportedCapabilities() {
-        return EnumSet.of(SearchCapabilities.MultimailboxSearch, 
SearchCapabilities.Text, SearchCapabilities.Attachment);
+        return EnumSet.of(SearchCapabilities.MultimailboxSearch, 
SearchCapabilities.Text, SearchCapabilities.FullText, 
SearchCapabilities.Attachment);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad33cef8/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
----------------------------------------------------------------------
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 9d5f2ba..da2c267 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
@@ -228,7 +228,7 @@ public class SimpleMessageSearchIndexTest extends 
AbstractMessageSearchIndexTest
 
     @Ignore
     @Override
-    public void 
searchWithFullTextShouldReturnMailsWhenTextBodyMatchesAndNonContinuousWords() 
throws Exception {
+    public void 
searchWithTextShouldReturnMailsWhenTextBodyMatchesAndNonContinuousWords() 
throws Exception {
     }
 
     @Ignore
@@ -238,17 +238,16 @@ public class SimpleMessageSearchIndexTest extends 
AbstractMessageSearchIndexTest
 
     @Ignore
     @Override
-    public void 
searchWithFullTextShouldReturnMailsWhenHtmlBodyMatchesAndNonContinuousWords() 
throws Exception {
+    public void 
searchWithTextShouldReturnMailsWhenHtmlBodyMatchesAndNonContinuousWords() 
throws Exception {
     }
 
     @Ignore
     @Override
-    public void 
searchWithFullTextShouldReturnMailsWhenTextBodyWithExtraUnindexedWords() throws 
Exception {
+    public void 
searchWithTextShouldReturnMailsWhenTextBodyWithExtraUnindexedWords() throws 
Exception {
     }
 
     @Ignore
     @Override
-    public void 
searchWithFullTextShouldReturnMailsWhenHtmlBodyMatchesWithStemming() throws 
Exception {
+    public void 
searchWithTextShouldReturnMailsWhenHtmlBodyMatchesWithStemming() throws 
Exception {
     }
-
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad33cef8/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
index 9a301b4..6388fff 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
@@ -77,7 +77,7 @@ public class SimpleMessageSearchIndex implements 
MessageSearchIndex {
     
     @Override
     public EnumSet<SearchCapabilities> getSupportedCapabilities() {
-        return EnumSet.of(SearchCapabilities.MultimailboxSearch, 
SearchCapabilities.Text, SearchCapabilities.Attachment);
+        return EnumSet.of(SearchCapabilities.MultimailboxSearch, 
SearchCapabilities.Text, SearchCapabilities.FullText, 
SearchCapabilities.Attachment);
     }
     
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad33cef8/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
----------------------------------------------------------------------
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 a2686f3..9fc2062 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
@@ -999,7 +999,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void searchWithFullTextShouldReturnNoMailWhenNotMatching() throws 
Exception {
+    public void searchWithTextShouldReturnNoMailWhenNotMatching() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("unmatching"));
 
@@ -1008,7 +1008,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void searchWithFullTextShouldReturnMailsWhenFromMatches() throws 
Exception {
+    public void searchWithTextShouldReturnMailsWhenFromMatches() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("spam.minet.net"));
 
@@ -1017,7 +1017,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void searchWithFullTextShouldReturnMailsWhenToMatches() throws 
Exception {
+    public void searchWithTextShouldReturnMailsWhenToMatches() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("listes.minet.net"));
 
@@ -1026,7 +1026,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void searchWithFullTextShouldReturnMailsWhenCcMatches() throws 
Exception {
+    public void searchWithTextShouldReturnMailsWhenCcMatches() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("abc.org"));
 
@@ -1035,7 +1035,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void searchWithFullTextShouldReturnMailsWhenBccMatches() throws 
Exception {
+    public void searchWithTextShouldReturnMailsWhenBccMatches() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("any.com"));
 
@@ -1044,7 +1044,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void searchWithFullTextShouldReturnMailsWhenTextBodyMatches() 
throws Exception {
+    public void searchWithTextShouldReturnMailsWhenTextBodyMatches() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("reviewing work"));
 
@@ -1054,7 +1054,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void 
searchWithFullTextShouldReturnMailsWhenTextBodyMatchesAndNonContinuousWords() 
throws Exception {
+    public void 
searchWithTextShouldReturnMailsWhenTextBodyMatchesAndNonContinuousWords() 
throws Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("reviewing feature"));
         // 2: text/plain contains: "Issue Type: New Feature"
@@ -1065,7 +1065,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void 
searchWithFullTextShouldReturnMailsWhenTextBodyMatchesInsensitiveWords() throws 
Exception {
+    public void 
searchWithTextShouldReturnMailsWhenTextBodyMatchesInsensitiveWords() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("reVieWing"));
         // text/plain contains: "We are reviewing work I did for this feature."
@@ -1075,7 +1075,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void 
searchWithFullTextShouldReturnMailsWhenTextBodyWithExtraUnindexedWords() throws 
Exception {
+    public void 
searchWithTextShouldReturnMailsWhenTextBodyWithExtraUnindexedWords() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new SearchQuery(SearchQuery.textContains("a 
reviewing of the work"));
         // text/plain contains: "We are reviewing work I did for this feature."
@@ -1085,7 +1085,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void searchWithFullTextShouldReturnMailsWhenHtmlBodyMatches() 
throws Exception {
+    public void searchWithTextShouldReturnMailsWhenHtmlBodyMatches() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("contains a banana"));
         // text/html contains: "This is a mail with beautifull html content 
which contains a banana."
@@ -1095,7 +1095,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void 
searchWithFullTextShouldReturnMailsWhenHtmlBodyMatchesWithStemming() throws 
Exception {
+    public void 
searchWithTextShouldReturnMailsWhenHtmlBodyMatchesWithStemming() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("contain banana"));
 
@@ -1104,7 +1104,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void 
searchWithFullTextShouldReturnMailsWhenHtmlBodyMatchesAndNonContinuousWords() 
throws Exception {
+    public void 
searchWithTextShouldReturnMailsWhenHtmlBodyMatchesAndNonContinuousWords() 
throws Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Text));
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.textContains("beautifull banana"));
 
@@ -1113,6 +1113,23 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
+    public void 
searchWithFulTextShouldReturnMailsWhenToAndBodyAndAttachmentMatches() throws 
Exception {
+        
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.FullText));
+        ComposedMessageId messageWithBeautifulBananaAsTextAttachment = 
myFolderMessageManager.appendMessage(
+                
ClassLoader.getSystemResourceAsStream("eml/emailWithTextAttachment.eml"),
+                new Date(1404252000000L),
+                session,
+                RECENT,
+                new Flags());
+        await();
+
+        SearchQuery searchQuery = new 
SearchQuery(SearchQuery.mailContains("User message banana"));
+
+        assertThat(messageSearchIndex.search(session, mailbox2, searchQuery))
+            
.containsExactly(messageWithBeautifulBananaAsTextAttachment.getUid());
+    }
+
+    @Test
     public void 
searchWithTextAttachmentShouldReturnMailsWhenAttachmentContentMatches() throws 
Exception {
         
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Attachment));
         ComposedMessageId messageWithBeautifulBananaAsTextAttachment = 
myFolderMessageManager.appendMessage(

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad33cef8/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
index cedaccb..e0f447c 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
@@ -101,14 +101,14 @@ public class JamesCapabilitiesServerTest {
     }
     
     @Test
-    public void startShouldFailWhenNoTextCapability() throws Exception {
+    public void startShouldFailWhenNoFullTextCapability() throws Exception {
         MailboxManager mailboxManager = mock(MailboxManager.class);
         when(mailboxManager.getSupportedMailboxCapabilities())
             
.thenReturn(EnumSet.allOf(MailboxManager.MailboxCapabilities.class));
         when(mailboxManager.getSupportedMessageCapabilities())
             
.thenReturn(EnumSet.allOf(MailboxManager.MessageCapabilities.class));
         when(mailboxManager.getSupportedSearchCapabilities())
-            
.thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.SearchCapabilities.Text)));
+            
.thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.SearchCapabilities.FullText)));
 
         server = createCassandraJamesServer(mailboxManager);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad33cef8/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
index 88de16a..9150680 100644
--- 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
+++ 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
@@ -151,8 +151,8 @@ public class JMAPModule extends AbstractModule {
             EnumSet<SearchCapabilities> searchCapabilities = 
mailboxManager.getSupportedSearchCapabilities();
             
Preconditions.checkArgument(searchCapabilities.contains(MailboxManager.SearchCapabilities.MultimailboxSearch),
                     "Multimailbox search in MailboxManager is required by JMAP 
Module");
-            
Preconditions.checkArgument(searchCapabilities.contains(MailboxManager.SearchCapabilities.Text),
-                    "Text support in MailboxManager is required by JMAP 
Module");
+            
Preconditions.checkArgument(searchCapabilities.contains(MailboxManager.SearchCapabilities.FullText),
+                    "FullText support in MailboxManager is required by JMAP 
Module");
             
Preconditions.checkArgument(searchCapabilities.contains(MailboxManager.SearchCapabilities.Attachment),
                     "Attachment Search support in MailboxManager is required 
by JMAP Module");
         }


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

Reply via email to