You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2017/02/15 00:01:26 UTC
[08/13] james-project git commit: JAMES-1934 implements hasAttachment
search for lucene
JAMES-1934 implements hasAttachment search for lucene
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/810c764d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/810c764d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/810c764d
Branch: refs/heads/master
Commit: 810c764dedb1a19a2d15c32c981545f390fcf807
Parents: c1357bc
Author: Luc DUZAN <ld...@linagora.com>
Authored: Thu Feb 9 12:57:49 2017 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Feb 15 06:59:45 2017 +0700
----------------------------------------------------------------------
.../lucene/search/LuceneMessageSearchIndex.java | 29 ++++++++++++++++----
1 file changed, 23 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/810c764d/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
index 9b3c0c1..eb7ec7c 100644
--- a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
+++ b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
@@ -52,6 +52,7 @@ import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
import org.apache.james.mailbox.model.SearchQuery;
import org.apache.james.mailbox.model.SearchQuery.AllCriterion;
+import org.apache.james.mailbox.model.SearchQuery.AttachmentCriterion;
import org.apache.james.mailbox.model.SearchQuery.ContainsOperator;
import org.apache.james.mailbox.model.SearchQuery.Criterion;
import org.apache.james.mailbox.model.SearchQuery.CustomFlagCriterion;
@@ -67,6 +68,7 @@ import org.apache.james.mailbox.model.UpdatedFlags;
import org.apache.james.mailbox.store.mail.MessageMapperFactory;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
import org.apache.james.mailbox.store.search.MessageSearchIndex;
import org.apache.james.mailbox.store.search.SearchUtil;
@@ -162,6 +164,11 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
public final static String UID_FIELD = "uid";
/**
+ * {@link Field} boolean field that say if the message as an attachment or not
+ */
+ public final static String HAS_ATTACHMENT_FIELD = "hasAttachment";
+
+ /**
* {@link Field} which will contain the {@link Flags} of the {@link MailboxMessage}
*/
public final static String FLAGS_FIELD = "flags";
@@ -553,7 +560,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
// TODO: Better handling
doc.add(new Field(MAILBOX_ID_FIELD, membership.getMailboxId().serialize().toUpperCase(Locale.ENGLISH), Store.YES, Index.NOT_ANALYZED));
doc.add(new NumericField(UID_FIELD,Store.YES, true).setLongValue(membership.getUid().asLong()));
-
+ doc.add(new Field(HAS_ATTACHMENT_FIELD, Boolean.toString(hasAttachment(membership)), Store.YES, Index.NOT_ANALYZED));
if (shouldIndexMessageId == IndexMessageId.Required) {
doc.add(new Field(MESSAGE_ID_FIELD, membership.getMessageId().serialize(), Store.YES, Index.NOT_ANALYZED));
}
@@ -575,6 +582,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
SimpleContentHandler handler = new SimpleContentHandler() {
+ @Override
public void headers(Header header) {
Date sentDate = null;
@@ -756,6 +764,11 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
return doc;
}
+ private static boolean hasAttachment(MailboxMessage membership) {
+ return FluentIterable.from(membership.getProperties())
+ .anyMatch(PropertyBuilder.isHasAttachmentProperty());
+ }
+
private String toSentDateField(DateResolution res) {
String field;
switch (res) {
@@ -972,6 +985,10 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
}
}
+ private Query createAttachmentQuery(boolean isSet, Query inMailboxes) throws MailboxException, UnsupportedSearchException {
+ return new TermQuery(new Term(HAS_ATTACHMENT_FIELD, Boolean.toString(isSet)));
+ }
+
/**
* Return a {@link Query} which is build based on the given {@link SearchQuery.FlagCriterion}. This is kind of a hack
* as it will do a search for the flags in this method and
@@ -1261,6 +1278,9 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
} else if (criterion instanceof SearchQuery.FlagCriterion) {
FlagCriterion crit = (FlagCriterion) criterion;
return createFlagQuery(toString(crit.getFlag()), crit.getOperator().isSet(), inMailboxes, recentUids);
+ } else if (criterion instanceof SearchQuery.AttachmentCriterion) {
+ AttachmentCriterion crit = (AttachmentCriterion) criterion;
+ return createAttachmentQuery(crit.getOperator().isSet(), inMailboxes);
} else if (criterion instanceof SearchQuery.CustomFlagCriterion) {
CustomFlagCriterion crit = (CustomFlagCriterion) criterion;
return createFlagQuery(crit.getFlag(), crit.getOperator().isSet(), inMailboxes, recentUids);
@@ -1284,6 +1304,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
/**
* @see org.apache.james.mailbox.store.search.ListeningMessageSearchIndex#add(org.apache.james.mailbox.MailboxSession, org.apache.james.mailbox.store.mail.model.Mailbox, MailboxMessage)
*/
+ @Override
public void add(MailboxSession session, Mailbox mailbox, MailboxMessage membership) throws MailboxException {
Document doc = createMessageDocument(session, membership);
Document flagsDoc = createFlagsDocument(membership);
@@ -1424,8 +1445,4 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
throw new MailboxException("Unable to delete message from index", e);
}
}
-
-
-
-
-}
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org