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

Reply via email to