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 no...@apache.org on 2011/06/10 19:09:30 UTC
svn commit: r1134392 - in /james/mailbox/trunk/store/src:
main/java/org/apache/james/mailbox/store/search/
main/java/org/apache/james/mailbox/store/search/lucene/
test/java/org/apache/james/mailbox/store/lucene/
Author: norman
Date: Fri Jun 10 17:09:30 2011
New Revision: 1134392
URL: http://svn.apache.org/viewvc?rev=1134392&view=rev
Log:
Fix some problems with Lucene based MessageSearchIndex.. See MAILBOX-10
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/lucene/LuceneMessageSearchIndexTest.java
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java?rev=1134392&r1=1134391&r2=1134392&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java Fri Jun 10 17:09:30 2011
@@ -31,6 +31,7 @@ import org.apache.james.mailbox.MessageR
import org.apache.james.mailbox.store.MailboxEventDispatcher.AddedImpl;
import org.apache.james.mailbox.store.MailboxEventDispatcher.ExpungedImpl;
import org.apache.james.mailbox.store.MailboxEventDispatcher.FlagsUpdatedImpl;
+import org.apache.james.mailbox.store.MailboxEventDispatcher.MailboxDeletionImpl;
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.Message;
@@ -122,6 +123,9 @@ public abstract class ListeningMessageSe
}
}
}
+ } else if (event instanceof MailboxDeletionImpl) {
+ // delete all indexed messages for the mailbox
+ delete(session, ((MailboxDeletionImpl) event).getMailbox(), MessageRange.all());
}
} catch (MailboxException e) {
session.getLog().debug("Unable to update index", e);
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java?rev=1134392&r1=1134391&r2=1134392&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java Fri Jun 10 17:09:30 2011
@@ -40,7 +40,7 @@ import org.apache.james.mailbox.MailboxE
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.SearchQuery;
-import org.apache.james.mailbox.SearchQuery.Conjunction;
+import org.apache.james.mailbox.SearchQuery.CustomFlagCriterion;
import org.apache.james.mailbox.UnsupportedSearchException;
import org.apache.james.mailbox.SearchQuery.AllCriterion;
import org.apache.james.mailbox.SearchQuery.ContainsOperator;
@@ -80,6 +80,7 @@ import org.apache.lucene.index.CorruptIn
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
@@ -227,9 +228,47 @@ public class LuceneMessageSearchIndex<Id
*/
public final static String MAILBOX_ID_FIELD ="mailboxid";
- public final static String SENT_DATE_FIELD_MILLISECOND_RESOLUTION ="sentDateMillisecondResolution";
-
+ /**
+ * {@link Field} which contain the Date header of the message with YEAR-Resolution
+ */
+ public final static String SENT_DATE_FIELD_YEAR_RESOLUTION ="sentdateYearResolution";
+
+
+ /**
+ * {@link Field} which contain the Date header of the message with MONTH-Resolution
+ */
+ public final static String SENT_DATE_FIELD_MONTH_RESOLUTION ="sentdateMonthResolution";
+
+ /**
+ * {@link Field} which contain the Date header of the message with DAY-Resolution
+ */
+ public final static String SENT_DATE_FIELD_DAY_RESOLUTION ="sentdateDayResolution";
+
+ /**
+ * {@link Field} which contain the Date header of the message with HOUR-Resolution
+ */
+ public final static String SENT_DATE_FIELD_HOUR_RESOLUTION ="sentdateHourResolution";
+ /**
+ * {@link Field} which contain the Date header of the message with MINUTE-Resolution
+ */
+ public final static String SENT_DATE_FIELD_MINUTE_RESOLUTION ="sentdateMinuteResolution";
+
+ /**
+ * {@link Field} which contain the Date header of the message with SECOND-Resolution
+ */
+ public final static String SENT_DATE_FIELD_SECOND_RESOLUTION ="sentdateSecondResolution";
+
+
+ /**
+ * {@link Field} which contain the Date header of the message with MILLISECOND-Resolution
+ */
+ public final static String SENT_DATE_FIELD_MILLISECOND_RESOLUTION ="sentdateMillisecondResolution";
+
+ public final static String SENT_DATE_SORT_FIELD_MILLISECOND_RESOLUTION ="sentdateSort";
+
+ public final static String NON_EXIST_FIELD ="nonExistField";
+
private final static String MEDIA_TYPE_TEXT = "text";
private final static String MEDIA_TYPE_MESSAGE = "message";
@@ -263,8 +302,8 @@ public class LuceneMessageSearchIndex<Id
private final static SortField BASE_SUBJECT_SORT = new SortField(BASE_SUBJECT_FIELD, SortField.STRING);
private final static SortField BASE_SUBJECT_SORT_REVERSE = new SortField(BASE_SUBJECT_FIELD, SortField.STRING, true);
- private final static SortField SENT_DATE_SORT = new SortField(SENT_DATE_FIELD_MILLISECOND_RESOLUTION, SortField.LONG);
- private final static SortField SENT_DATE_SORT_REVERSE = new SortField(SENT_DATE_FIELD_MILLISECOND_RESOLUTION, SortField.LONG, true);
+ private final static SortField SENT_DATE_SORT = new SortField(SENT_DATE_SORT_FIELD_MILLISECOND_RESOLUTION, SortField.LONG);
+ private final static SortField SENT_DATE_SORT_REVERSE = new SortField(SENT_DATE_SORT_FIELD_MILLISECOND_RESOLUTION, SortField.LONG, true);
private final static SortField FIRST_TO_MAILBOX_DISPLAY_SORT = new SortField(FIRST_TO_MAILBOX_DISPLAY_FIELD, SortField.LONG);
private final static SortField FIRST_TO_MAILBOX_DISPLAY_SORT_REVERSE = new SortField(FIRST_TO_MAILBOX_DISPLAY_FIELD, SortField.LONG, true);
@@ -274,12 +313,13 @@ public class LuceneMessageSearchIndex<Id
public LuceneMessageSearchIndex(MessageMapperFactory<Id> factory, Directory directory) throws CorruptIndexException, LockObtainFailedException, IOException {
- this(factory, directory, true);
+ this(factory, directory, false, true);
}
- public LuceneMessageSearchIndex(MessageMapperFactory<Id> factory, Directory directory, boolean lenient) throws CorruptIndexException, LockObtainFailedException, IOException {
- this(factory, new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_31, createAnalyzer(lenient))));
+ public LuceneMessageSearchIndex(MessageMapperFactory<Id> factory, Directory directory, boolean dropIndexOnStart, boolean lenient) throws CorruptIndexException, LockObtainFailedException, IOException {
+ super(factory);
+ this.writer = new IndexWriter(directory, createConfig(createAnalyzer(lenient), dropIndexOnStart));
}
@@ -296,6 +336,17 @@ public class LuceneMessageSearchIndex<Id
public void setMaxQueryResults(int maxQueryResults) {
this.maxQueryResults = maxQueryResults;
}
+
+ protected IndexWriterConfig createConfig(Analyzer analyzer, boolean dropIndexOnStart) {
+ IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_31, analyzer);
+ if (dropIndexOnStart) {
+ config.setOpenMode(OpenMode.CREATE);
+ } else {
+ config.setOpenMode(OpenMode.CREATE_OR_APPEND);
+ }
+ return config;
+ }
+
/**
* Create a {@link Analyzer} which is used to index the {@link MailboxMembership}'s
*
@@ -303,7 +354,7 @@ public class LuceneMessageSearchIndex<Id
*
* @return analyzer
*/
- private static Analyzer createAnalyzer(boolean lenient) {
+ protected Analyzer createAnalyzer(boolean lenient) {
if (lenient) {
return new LenientImapSearchAnalyzer();
} else {
@@ -339,13 +390,15 @@ public class LuceneMessageSearchIndex<Id
searcher = new IndexSearcher(IndexReader.open(writer, true));
BooleanQuery query = new BooleanQuery();
query.add(new TermQuery(new Term(MAILBOX_ID_FIELD, mailbox.getMailboxId().toString())), BooleanClause.Occur.MUST);
-
+ // Not return flags documents
+ query.add(new PrefixQuery(new Term(FLAGS_FIELD, "")), BooleanClause.Occur.MUST_NOT);
List<Criterion> crits = searchQuery.getCriterias();
for (int i = 0; i < crits.size(); i++) {
query.add(createQuery(crits.get(i), mailbox), BooleanClause.Occur.MUST);
}
-
- // query for all the documents sorted by uid
+
+ System.err.println(query.toString());
+ // query for all the documents sorted as specified in the SearchQuery
TopDocs docs = searcher.search(query, null, maxQueryResults, createSort(searchQuery.getSorts()));
ScoreDoc[] sDocs = docs.scoreDocs;
for (int i = 0; i < sDocs.length; i++) {
@@ -416,7 +469,10 @@ public class LuceneMessageSearchIndex<Id
doc.add(new Field(HEADERS_FIELD, fullValue, Store.NO, Index.ANALYZED));
doc.add(new Field(PREFIX_HEADER_FIELD + headerName, headerValue, Store.NO, Index.ANALYZED));
- // TODO: Handle base subject
+ if (f instanceof DateTimeField) {
+ sentDate = ((DateTimeField) f).getDate();
+ }
+
if (f instanceof AddressListField) {
AddressListField addressField = (AddressListField) f;
String field = null;
@@ -430,8 +486,10 @@ public class LuceneMessageSearchIndex<Id
field = BCC_FIELD;
}
+
// Check if we can index the the addressfield in the right manner
if (field != null) {
+
AddressList aList = addressField.getAddressList();
if (aList != null) {
@@ -442,7 +500,6 @@ public class LuceneMessageSearchIndex<Id
String value = mailbox.getEncodedString().toUpperCase(Locale.ENGLISH);
doc.add(new Field(field, value, Store.NO, Index.ANALYZED));
-
if (i == 0) {
String mailboxAddress = SearchUtil.getMailboxAddress(mailbox);
String mailboxDisplay = SearchUtil.getDisplayAddress(mailbox);
@@ -488,14 +545,21 @@ public class LuceneMessageSearchIndex<Id
}
} else if (headerName.equalsIgnoreCase("Subject")) {
doc.add(new Field(BASE_SUBJECT_FIELD, SearchUtil.getBaseSubject(headerValue), Store.YES, Index.NOT_ANALYZED));
- } else if (f instanceof DateTimeField) {
- sentDate = ((DateTimeField) f).getDate();
- }
+ }
}
if (sentDate == null) {
sentDate = membership.getInternalDate();
+ } else {
+ doc.add(new NumericField(SENT_DATE_FIELD_YEAR_RESOLUTION, Store.NO, true).setLongValue(DateUtils.truncate(sentDate, Calendar.YEAR).getTime()));
+ doc.add(new NumericField(SENT_DATE_FIELD_MONTH_RESOLUTION, Store.NO, true).setLongValue(DateUtils.truncate(sentDate, Calendar.MONTH).getTime()));
+ doc.add(new NumericField(SENT_DATE_FIELD_DAY_RESOLUTION, Store.NO, true).setLongValue(DateUtils.truncate(sentDate, Calendar.DAY_OF_MONTH).getTime()));
+ doc.add(new NumericField(SENT_DATE_FIELD_HOUR_RESOLUTION, Store.NO, true).setLongValue(DateUtils.truncate(sentDate, Calendar.HOUR_OF_DAY).getTime()));
+ doc.add(new NumericField(SENT_DATE_FIELD_MINUTE_RESOLUTION, Store.NO, true).setLongValue(DateUtils.truncate(sentDate, Calendar.MINUTE).getTime()));
+ doc.add(new NumericField(SENT_DATE_FIELD_SECOND_RESOLUTION, Store.YES, true).setLongValue(DateUtils.truncate(sentDate, Calendar.SECOND).getTime()));
+ doc.add(new NumericField(SENT_DATE_FIELD_MILLISECOND_RESOLUTION, Store.NO, true).setLongValue(DateUtils.truncate(sentDate, Calendar.MILLISECOND).getTime()));
+
}
- doc.add(new NumericField(SENT_DATE_FIELD_MILLISECOND_RESOLUTION,Store.YES, true).setLongValue(DateUtils.truncate(sentDate,Calendar.MILLISECOND).getTime()));
+ doc.add(new NumericField(SENT_DATE_SORT_FIELD_MILLISECOND_RESOLUTION,Store.YES, true).setLongValue(DateUtils.truncate(sentDate,Calendar.MILLISECOND).getTime()));
doc.add(new Field(FIRST_FROM_MAILBOX_NAME_FIELD, firstFromMailbox, Store.YES, Index.NOT_ANALYZED));
doc.add(new Field(FIRST_TO_MAILBOX_NAME_FIELD, firstToMailbox, Store.YES, Index.NOT_ANALYZED));
@@ -556,6 +620,33 @@ public class LuceneMessageSearchIndex<Id
return doc;
}
+ private String toSentDateField(DateResolution res) {
+ String field;
+ switch (res) {
+ case Year:
+ field = SENT_DATE_FIELD_YEAR_RESOLUTION;
+ break;
+ case Month:
+ field = SENT_DATE_FIELD_MONTH_RESOLUTION;
+ break;
+ case Day:
+ field = SENT_DATE_FIELD_DAY_RESOLUTION;
+ break;
+ case Hour:
+ field = SENT_DATE_FIELD_HOUR_RESOLUTION;
+ break;
+ case Minute:
+ field = SENT_DATE_FIELD_MINUTE_RESOLUTION;
+ break;
+ case Second:
+ field = SENT_DATE_FIELD_SECOND_RESOLUTION;
+ break;
+ default:
+ field = SENT_DATE_FIELD_MILLISECOND_RESOLUTION;
+ break;
+ }
+ return field;
+ }
private String toInteralDateField(DateResolution res) {
String field;
@@ -593,22 +684,10 @@ public class LuceneMessageSearchIndex<Id
* @throws UnsupportedSearchException
*/
private Query createInternalDateQuery(SearchQuery.InternalDateCriterion crit) throws UnsupportedSearchException {
- DateOperator op = crit.getOperator();
- DateResolution res = op.getDateResultion();
- Date date = op.getDate();
- long value = DateUtils.truncate(date, SearchQuery.toCalendarType(res)).getTime();
+ DateOperator dop = crit.getOperator();
+ DateResolution res = dop.getDateResultion();
String field = toInteralDateField(res);
-
- switch(op.getType()) {
- case ON:
- return NumericRangeQuery.newLongRange(field ,value, value, true, true);
- case BEFORE:
- return NumericRangeQuery.newLongRange(field ,0L, value, true, false);
- case AFTER:
- return NumericRangeQuery.newLongRange(field ,value, Long.MAX_VALUE, false, true);
- default:
- throw new UnsupportedSearchException();
- }
+ return createQuery(field, dop);
}
/**
@@ -661,6 +740,10 @@ public class LuceneMessageSearchIndex<Id
return createTermQuery(fieldName, cop.getValue().toUpperCase(Locale.ENGLISH));
} else if (op instanceof SearchQuery.ExistsOperator){
return new PrefixQuery(new Term(fieldName, ""));
+ } else if (op instanceof SearchQuery.DateOperator) {
+ DateOperator dop = (DateOperator) op;
+ String field = toSentDateField(dop.getDateResultion());
+ return createQuery(field, dop);
} else if (op instanceof SearchQuery.AddressOperator) {
return createTermQuery(fieldName.toLowerCase(), ((SearchQuery.AddressOperator) op).getAddress().toUpperCase(Locale.ENGLISH));
} else {
@@ -669,6 +752,22 @@ public class LuceneMessageSearchIndex<Id
}
}
+ private Query createQuery(String field, DateOperator dop) throws UnsupportedSearchException {
+ Date date = dop.getDate();
+ DateResolution res = dop.getDateResultion();
+ long value = DateUtils.truncate(date, SearchQuery.toCalendarType(res)).getTime();
+ switch(dop.getType()) {
+ case ON:
+ return NumericRangeQuery.newLongRange(field ,value, value, true, true);
+ case BEFORE:
+ return NumericRangeQuery.newLongRange(field ,0L, value, true, false);
+ case AFTER:
+ return NumericRangeQuery.newLongRange(field ,value, Long.MAX_VALUE, false, true);
+ default:
+ throw new UnsupportedSearchException();
+ }
+ }
+
/**
* Return a {@link Query} which is build based on the given {@link SearchQuery.UidCriterion}
*
@@ -721,18 +820,16 @@ public class LuceneMessageSearchIndex<Id
* @return query
* @throws UnsupportedSearchException
*/
- private Query createFlagQuery(SearchQuery.FlagCriterion crit, Mailbox<?> mailbox) throws MailboxException, UnsupportedSearchException {
- Flag flag = crit.getFlag();
- String value = toString(flag);
+ private Query createFlagQuery(String flag, boolean isSet, Mailbox<?> mailbox) throws MailboxException, UnsupportedSearchException {
BooleanQuery query = new BooleanQuery();
- if (crit.getOperator().isSet()) {
- query.add(new TermQuery(new Term(FLAGS_FIELD, value)), BooleanClause.Occur.MUST);
+ if (isSet) {
+ query.add(new TermQuery(new Term(FLAGS_FIELD, flag)), BooleanClause.Occur.MUST);
} else {
// lucene does not support simple NOT queries so we do some nasty hack here
BooleanQuery bQuery = new BooleanQuery();
- bQuery.add(new PrefixQuery(new Term(UID_FIELD, "")), BooleanClause.Occur.MUST);
- bQuery.add(new TermQuery(new Term(FLAGS_FIELD, value)),BooleanClause.Occur.MUST_NOT);
+ bQuery.add(new PrefixQuery(new Term(FLAGS_FIELD, "")), BooleanClause.Occur.MUST);
+ bQuery.add(new TermQuery(new Term(FLAGS_FIELD, flag)),BooleanClause.Occur.MUST_NOT);
query.add(bQuery, BooleanClause.Occur.MUST);
}
@@ -929,7 +1026,7 @@ public class LuceneMessageSearchIndex<Id
private Query createAllQuery(SearchQuery.AllCriterion crit) throws UnsupportedSearchException{
BooleanQuery query = new BooleanQuery();
- query.add(NumericRangeQuery.newLongRange(UID_FIELD, Long.MIN_VALUE, Long.MAX_VALUE, true, true), BooleanClause.Occur.MUST);
+ query.add(createQuery(MessageRange.all()), BooleanClause.Occur.MUST);
query.add(new PrefixQuery(new Term(FLAGS_FIELD, "")), BooleanClause.Occur.MUST_NOT);
return query;
@@ -943,29 +1040,32 @@ public class LuceneMessageSearchIndex<Id
* @throws UnsupportedSearchException
*/
private Query createConjunctionQuery(SearchQuery.ConjunctionCriterion crit, Mailbox<?> mailbox) throws UnsupportedSearchException, MailboxException {
- BooleanClause.Occur occur;
+ List<Criterion> crits = crit.getCriteria();
+ BooleanQuery conQuery = new BooleanQuery();
switch (crit.getType()) {
case AND:
- occur = BooleanClause.Occur.MUST;
- break;
+ for (int i = 0; i < crits.size(); i++) {
+ conQuery.add(createQuery(crits.get(i), mailbox), BooleanClause.Occur.MUST);
+ }
+ return conQuery;
case OR:
- occur = BooleanClause.Occur.SHOULD;
- break;
+ for (int i = 0; i < crits.size(); i++) {
+ conQuery.add(createQuery(crits.get(i), mailbox), BooleanClause.Occur.SHOULD);
+ }
+ return conQuery;
case NOR:
- occur = BooleanClause.Occur.MUST_NOT;
- break;
+ BooleanQuery nor = new BooleanQuery();
+ for (int i = 0; i < crits.size(); i++) {
+ conQuery.add(createQuery(crits.get(i), mailbox), BooleanClause.Occur.SHOULD);
+ }
+ nor.add(new TermQuery(new Term(MAILBOX_ID_FIELD, mailbox.getMailboxId().toString())), BooleanClause.Occur.MUST);
+
+ nor.add(conQuery, BooleanClause.Occur.MUST_NOT);
+ return nor;
default:
throw new UnsupportedSearchException();
}
- List<Criterion> crits = crit.getCriteria();
- BooleanQuery conQuery = new BooleanQuery();
- for (int i = 0; i < crits.size(); i++) {
- conQuery.add(createQuery(crits.get(i), mailbox), occur);
- }
- if (Conjunction.NOR.equals(crit.getType())) {
- conQuery.add(new TermQuery(new Term(MAILBOX_ID_FIELD, mailbox.getMailboxId().toString())), BooleanClause.Occur.MUST);
- }
- return conQuery;
+
}
/**
@@ -990,7 +1090,10 @@ public class LuceneMessageSearchIndex<Id
return createUidQuery(crit);
} else if (criterion instanceof SearchQuery.FlagCriterion) {
FlagCriterion crit = (FlagCriterion) criterion;
- return createFlagQuery(crit, mailbox);
+ return createFlagQuery(toString(crit.getFlag()), crit.getOperator().isSet(), mailbox);
+ } else if (criterion instanceof SearchQuery.CustomFlagCriterion) {
+ CustomFlagCriterion crit = (CustomFlagCriterion) criterion;
+ return createFlagQuery(crit.getFlag(), crit.getOperator().isSet(), mailbox);
} else if (criterion instanceof SearchQuery.TextCriterion) {
SearchQuery.TextCriterion crit = (SearchQuery.TextCriterion) criterion;
return createTextQuery(crit);
@@ -1035,7 +1138,7 @@ public class LuceneMessageSearchIndex<Id
IndexSearcher searcher = new IndexSearcher(IndexReader.open(writer, true));
BooleanQuery query = new BooleanQuery();
query.add(new TermQuery(new Term(MAILBOX_ID_FIELD, mailbox.getMailboxId().toString())), BooleanClause.Occur.MUST);
- query.add(NumericRangeQuery.newLongRange(UID_FIELD, range.getUidFrom(), range.getUidTo(), true, true), BooleanClause.Occur.MUST);
+ query.add(createQuery(range), BooleanClause.Occur.MUST);
query.add( new PrefixQuery(new Term(FLAGS_FIELD, "")), BooleanClause.Occur.MUST);
TopDocs docs = searcher.search(query, 100000);
@@ -1096,6 +1199,17 @@ public class LuceneMessageSearchIndex<Id
doc.add(new Field(FLAGS_FIELD, "",Store.NO, Index.NOT_ANALYZED));
}
}
+
+ private Query createQuery(MessageRange range) {
+ switch (range.getType()) {
+ case ONE:
+ return NumericRangeQuery.newLongRange(UID_FIELD, range.getUidFrom(), range.getUidTo(), true, true);
+ case FROM:
+ return NumericRangeQuery.newLongRange(UID_FIELD, range.getUidFrom(), Long.MAX_VALUE, true, true);
+ default:
+ return NumericRangeQuery.newLongRange(UID_FIELD, 0L, Long.MAX_VALUE, true, true);
+ }
+ }
/*
* (non-Javadoc)
* @see org.apache.james.mailbox.store.MessageSearchIndex#delete(org.apache.james.mailbox.MailboxSession, org.apache.james.mailbox.store.mail.model.Mailbox, org.apache.james.mailbox.MessageRange)
@@ -1103,7 +1217,7 @@ public class LuceneMessageSearchIndex<Id
public void delete(MailboxSession session, Mailbox<Id> mailbox, MessageRange range) throws MailboxException {
BooleanQuery query = new BooleanQuery();
query.add(new TermQuery(new Term(MAILBOX_ID_FIELD, mailbox.getMailboxId().toString())), BooleanClause.Occur.MUST);
- query.add(NumericRangeQuery.newLongRange(UID_FIELD, range.getUidFrom(), range.getUidTo(), true, true), BooleanClause.Occur.MUST);
+ query.add(createQuery(range), BooleanClause.Occur.MUST);
try {
writer.deleteDocuments(query);
Modified: james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/lucene/LuceneMessageSearchIndexTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/lucene/LuceneMessageSearchIndexTest.java?rev=1134392&r1=1134391&r2=1134392&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/lucene/LuceneMessageSearchIndexTest.java (original)
+++ james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/lucene/LuceneMessageSearchIndexTest.java Fri Jun 10 17:09:30 2011
@@ -74,7 +74,7 @@ public class LuceneMessageSearchIndexTes
@Before
public void setUp() throws Exception {
- index = new LuceneMessageSearchIndex<Long>(null, new RAMDirectory(), useLenient());
+ index = new LuceneMessageSearchIndex<Long>(null, new RAMDirectory(), true, useLenient());
index.setEnableSuffixMatch(true);
List<org.apache.james.mailbox.store.SimpleHeader> headersSubject = new ArrayList<org.apache.james.mailbox.store.SimpleHeader>();
headersSubject.add(new SimpleHeader("Subject", 1, "test"));
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org