Support "now" for dates in lucene queries. d📅now d📅"now" d📅[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
This commit is contained in:
Andrew Hind
2009-07-16 11:12:32 +00:00
parent edb2c94241
commit 7eb5cc71a4
3 changed files with 30 additions and 12 deletions

View File

@@ -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);

View File

@@ -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();

View File

@@ -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;