From 7eb5cc71a42a83f514c2c4fdf06403237fab4ba2 Mon Sep 17 00:00:00 2001 From: Andrew Hind Date: Thu, 16 Jul 2009 11:12:32 +0000 Subject: [PATCH] Support "now" for dates in lucene queries. d:date:now d:date:"now" d:date:[MIN TO NOW] should all be supported git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@15226 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../search/impl/lucene/ADMLuceneTest.java | 5 +++++ .../lucene/analysis/DateTimeTokenFilter.java | 15 +++++++++---- .../impl/lucene/analysis/DateTokenFilter.java | 22 ++++++++++++------- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java index bb736a4379..1bc3242cef 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java @@ -3717,6 +3717,11 @@ public class ADMLuceneTest extends TestCase results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@cm\\:created:[MIN TO " + sDate + "]", null); assertEquals(1, results.length()); results.close(); + + sDate = df.format(date); + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@cm\\:created:[MIN TO NOW]", null); + assertEquals(1, results.length()); + results.close(); sDate = df.format(date); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(ContentModel.PROP_CREATED) + ":[MIN TO " + sDate + "]", null); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/analysis/DateTimeTokenFilter.java b/source/java/org/alfresco/repo/search/impl/lucene/analysis/DateTimeTokenFilter.java index f7dbef5a40..5be5bf67ec 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/analysis/DateTimeTokenFilter.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/analysis/DateTimeTokenFilter.java @@ -77,13 +77,20 @@ public class DateTimeTokenFilter extends Tokenizer while ((candidate = baseTokeniser.next()) != null) { Date date; - try + if (candidate.termText().equalsIgnoreCase("now")) { - date = df.parse(candidate.termText()); + date = new Date(); } - catch (ParseException e) + else { - continue; + try + { + date = df.parse(candidate.termText()); + } + catch (ParseException e) + { + continue; + } } Calendar cal = Calendar.getInstance(); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/analysis/DateTokenFilter.java b/source/java/org/alfresco/repo/search/impl/lucene/analysis/DateTokenFilter.java index 89eebede02..d822d1be0d 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/analysis/DateTokenFilter.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/analysis/DateTokenFilter.java @@ -41,7 +41,7 @@ import org.apache.lucene.analysis.WhitespaceTokenizer; public class DateTokenFilter extends Tokenizer { Tokenizer baseTokeniser; - + public DateTokenFilter(Reader in) { super(in); @@ -53,20 +53,26 @@ public class DateTokenFilter extends Tokenizer SimpleDateFormat df = CachingDateFormat.getDateFormat(); SimpleDateFormat dof = CachingDateFormat.getDateOnlyFormat(); Token candidate; - while((candidate = baseTokeniser.next()) != null) + while ((candidate = baseTokeniser.next()) != null) { Date date; - try + if (candidate.termText().equalsIgnoreCase("now")) { - date = df.parse(candidate.termText()); + date = new Date(); } - catch (ParseException e) + else { - continue; + try + { + date = df.parse(candidate.termText()); + } + catch (ParseException e) + { + continue; + } } String valueString = dof.format(date); - Token integerToken = new Token(valueString, candidate.startOffset(), candidate.startOffset(), - candidate.type()); + Token integerToken = new Token(valueString, candidate.startOffset(), candidate.startOffset(), candidate.type()); return integerToken; } return null;