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/11 17:11:19 UTC
svn commit: r1134668 -
/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java
Author: norman
Date: Sat Jun 11 15:11:19 2011
New Revision: 1134668
URL: http://svn.apache.org/viewvc?rev=1134668&view=rev
Log:
Fix address indexing now only recent flag indexing seems to not work like expected. See MAILBOX-10
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java
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=1134668&r1=1134667&r2=1134668&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 Sat Jun 11 15:11:19 2011
@@ -61,7 +61,6 @@ import org.apache.james.mailbox.store.se
import org.apache.james.mailbox.store.search.SearchUtil;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.descriptor.BodyDescriptor;
-import org.apache.james.mime4j.field.AddressListField;
import org.apache.james.mime4j.field.DateTimeField;
import org.apache.james.mime4j.field.address.Address;
import org.apache.james.mime4j.field.address.AddressList;
@@ -73,6 +72,7 @@ import org.apache.james.mime4j.message.H
import org.apache.james.mime4j.message.SimpleContentHandler;
import org.apache.james.mime4j.parser.MimeEntityConfig;
import org.apache.james.mime4j.parser.MimeStreamParser;
+import org.apache.james.mime4j.util.MimeUtil;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
@@ -444,7 +444,7 @@ public class LuceneMessageSearchIndex<Id
* @param membership
* @return document
*/
- private Document createMessageDocument(final Message<?> membership) throws MailboxException{
+ private Document createMessageDocument(final MailboxSession session, final Message<?> membership) throws MailboxException{
final Document doc = new Document();
// TODO: Better handling
doc.add(new Field(MAILBOX_ID_FIELD, membership.getMailboxId().toString().toUpperCase(Locale.ENGLISH), Store.YES, Index.NOT_ANALYZED));
@@ -495,14 +495,12 @@ public class LuceneMessageSearchIndex<Id
sentDate = cal.getTime();
} catch (org.apache.james.mime4j.field.datetime.parser.ParseException e) {
+ session.getLog().debug("Unable to parse Date header for proper indexing", e);
// This should never happen anyway fallback to the already parsed field
sentDate = ((DateTimeField) f).getDate();
}
- }
-
- if (f instanceof AddressListField) {
- AddressListField addressField = (AddressListField) f;
+ }
String field = null;
if ("To".equalsIgnoreCase(headerName)) {
field = TO_FIELD;
@@ -515,18 +513,17 @@ public class LuceneMessageSearchIndex<Id
}
- // Check if we can index the the addressfield in the right manner
+ // Check if we can index the the address in the right manner
if (field != null) {
-
- AddressList aList = addressField.getAddressList();
-
- if (aList != null) {
+ try {
+ // not sure if we really should reparse it. It maybe be better to check just for the right type.
+ // But this impl was easier in the first place
+ AddressList aList = AddressList.parse(MimeUtil.unfold(f.getBody()));
for (int i = 0; i < aList.size(); i++) {
Address address = aList.get(i);
if (address instanceof org.apache.james.mime4j.field.address.Mailbox) {
org.apache.james.mime4j.field.address.Mailbox mailbox = (org.apache.james.mime4j.field.address.Mailbox) address;
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);
@@ -569,8 +566,12 @@ public class LuceneMessageSearchIndex<Id
}
}
}
+
+ } catch (org.apache.james.mime4j.field.address.parser.ParseException e) {
+ session.getLog().debug("Unable to parse address from header " + headerName + " for indexing", e);
}
- }
+ doc.add(new Field(field, headerValue, Store.NO, Index.ANALYZED));
+
} else if (headerName.equalsIgnoreCase("Subject")) {
doc.add(new Field(BASE_SUBJECT_FIELD, SearchUtil.getBaseSubject(headerValue), Store.YES, Index.NOT_ANALYZED));
}
@@ -628,7 +629,7 @@ public class LuceneMessageSearchIndex<Id
};
MimeEntityConfig config = new MimeEntityConfig();
config.setMaxLineLen(-1);
- config.setStrictParsing(false);
+ //config.setStrictParsing(false);
config.setMaxContentLen(-1);
MimeStreamParser parser = new MimeStreamParser(config);
parser.setContentHandler(handler);
@@ -769,7 +770,8 @@ public class LuceneMessageSearchIndex<Id
*/
private Query createHeaderQuery(SearchQuery.HeaderCriterion crit) throws UnsupportedSearchException {
HeaderOperator op = crit.getOperator();
- String fieldName = PREFIX_HEADER_FIELD + crit.getHeaderName().toUpperCase(Locale.ENGLISH);
+ String name = crit.getHeaderName().toUpperCase(Locale.ENGLISH);
+ String fieldName = PREFIX_HEADER_FIELD + name;
if (op instanceof SearchQuery.ContainsOperator) {
ContainsOperator cop = (ContainsOperator) op;
return createTermQuery(fieldName, cop.getValue().toUpperCase(Locale.ENGLISH));
@@ -780,13 +782,15 @@ public class LuceneMessageSearchIndex<Id
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));
+ String field = name.toLowerCase(Locale.ENGLISH);
+ return createTermQuery(field, ((SearchQuery.AddressOperator) op).getAddress().toUpperCase(Locale.ENGLISH));
} else {
// Operator not supported
throw new UnsupportedSearchException();
}
}
+
private Query createQuery(String field, DateOperator dop) throws UnsupportedSearchException {
Date date = dop.getDate();
DateResolution res = dop.getDateResultion();
@@ -1171,7 +1175,7 @@ public class LuceneMessageSearchIndex<Id
* @see org.apache.james.mailbox.store.MessageSearchIndex#add(org.apache.james.mailbox.MailboxSession, org.apache.james.mailbox.store.mail.model.Mailbox, org.apache.james.mailbox.store.mail.model.MailboxMembership)
*/
public void add(MailboxSession session, Mailbox<Id> mailbox, Message<Id> membership) throws MailboxException {
- Document doc = createMessageDocument(membership);
+ Document doc = createMessageDocument(session, membership);
Document flagsDoc = createFlagsDocument(membership);
try {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org