This is an automated email from the ASF dual-hosted git repository. btellier 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 3a80597887 JAMES-3921 Fix Lucene indexing issues (#1621) 3a80597887 is described below commit 3a80597887d64c30bfa1ab1ce527959b6841f63e Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Mon Jul 3 08:23:02 2023 +0200 JAMES-3921 Fix Lucene indexing issues (#1621) --- .../lucene/search/LuceneMessageSearchIndex.java | 24 ++-------------------- .../LuceneMailboxMessageSearchIndexTest.java | 24 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 23 deletions(-) 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 c71e17ce5e..141c6d06ee 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 @@ -22,7 +22,6 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.StringReader; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Calendar; @@ -79,11 +78,9 @@ import org.apache.james.mime4j.dom.address.Address; import org.apache.james.mime4j.dom.address.AddressList; import org.apache.james.mime4j.dom.address.Group; import org.apache.james.mime4j.dom.address.MailboxList; -import org.apache.james.mime4j.dom.datetime.DateTime; import org.apache.james.mime4j.dom.field.DateTimeField; import org.apache.james.mime4j.field.address.AddressFormatter; import org.apache.james.mime4j.field.address.LenientAddressParser; -import org.apache.james.mime4j.field.datetime.parser.DateTimeParser; import org.apache.james.mime4j.message.SimpleContentHandler; import org.apache.james.mime4j.parser.MimeStreamParser; import org.apache.james.mime4j.stream.BodyDescriptor; @@ -116,8 +113,6 @@ import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.store.Directory; import org.apache.lucene.util.Version; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.github.fge.lambdas.Throwing; import com.google.common.base.Preconditions; @@ -135,7 +130,6 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex { } - private static final Logger LOGGER = LoggerFactory.getLogger(LuceneMessageSearchIndex.class); private static final Date MAX_DATE; private static final Date MIN_DATE; public static final org.apache.james.events.Group GROUP = new LuceneMessageSearchIndexGroup(); @@ -628,22 +622,8 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex { doc.add(new Field(PREFIX_HEADER_FIELD + headerName, headerValue, Store.NO, Index.ANALYZED)); if (f instanceof DateTimeField) { - // We need to make sure we convert it to GMT - try (StringReader reader = new StringReader(f.getBody())) { - DateTime dateTime = new DateTimeParser(reader).parseAll(); - Calendar cal = getGMT(); - cal.set(dateTime.getYear(), dateTime.getMonth() - 1, dateTime.getDay(), dateTime.getHour(), dateTime.getMinute(), dateTime.getSecond()); - sentDate = cal.getTime(); - - } catch (org.apache.james.mime4j.field.datetime.parser.ParseException e) { - LOGGER.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 (sentDate == null) { - sentDate = membership.getInternalDate(); - } - + DateTimeField dateTimeField = (DateTimeField) f; + sentDate = dateTimeField.getDate(); } String field = null; if ("To".equalsIgnoreCase(headerName)) { diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java index 9508ffeba0..1a7e7fd338 100644 --- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java +++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java @@ -97,6 +97,7 @@ class LuceneMailboxMessageSearchIndexTest { MessageId id3; MessageId id4; MessageId id5; + private TestMessageId.Factory factory; protected boolean useLenient() { return true; @@ -105,7 +106,7 @@ class LuceneMailboxMessageSearchIndexTest { @BeforeEach void setUp() throws Exception { session = MailboxSessionUtil.create(Username.of("username")); - TestMessageId.Factory factory = new TestMessageId.Factory(); + factory = new TestMessageId.Factory(); id1 = factory.generate(); id2 = factory.generate(); id3 = factory.generate(); @@ -192,6 +193,27 @@ class LuceneMailboxMessageSearchIndexTest { } + @Test + void dateHeaderParsingShouldNotImpactProcessing() throws Exception { + TestId mailboxId = TestId.of(2); + + MessageId id = factory.generate(); + MessageUid uid = MessageUid.of(500); + String subject = "Mail " + id; + + MessageBuilder builder = new MessageBuilder() + .header("Subject", subject) + .header("Date", "31.3.2009") + .uid(uid) + .mailboxId(mailboxId); + + index.add(session, mailbox3, builder.build(id)).block(); + + SearchQuery query = SearchQuery.of(SearchQuery.headerContains("Subject", subject)); + Stream<MessageUid> result = index.search(session, mailbox3, query).toStream(); + assertThat(result).containsExactly(uid); + } + @Test void bodySearchShouldMatchPhraseInBody() throws Exception { SearchQuery query = SearchQuery.of(SearchQuery.bodyContains(CUSTARD)); --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org