diff --git a/contrib/adsabs/src/java/org/apache/solr/analysis/DateNormalizerTokenFilter.java b/contrib/adsabs/src/java/org/apache/solr/analysis/DateNormalizerTokenFilter.java index adfa8975e..75b99bf91 100644 --- a/contrib/adsabs/src/java/org/apache/solr/analysis/DateNormalizerTokenFilter.java +++ b/contrib/adsabs/src/java/org/apache/solr/analysis/DateNormalizerTokenFilter.java @@ -10,6 +10,7 @@ import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; +import org.apache.solr.common.SolrException; import org.apache.solr.util.DateMathParser; public final class DateNormalizerTokenFilter extends TokenFilter { @@ -54,6 +55,20 @@ private CharSequence normalize(String string) { normalDate = false; } + // we allow symbolic date math logic; if parsed + // then the date will always be moved into the first + // 30 mins of the day + try { + Date date = dmp.parseMath(null, string); + dmp.setNow(date); + date = dmp.parseMath("/DAY" + this.offset); + return sdf.format(date); + } catch (SolrException e) { + // pass + } catch (ParseException e) { + // pass + } + for (SimpleDateFormat f: this.format) { try { Date date = f.parse(string); diff --git a/contrib/adsabs/src/test/org/apache/solr/analysis/TestAdsabsTypeDateString.java b/contrib/adsabs/src/test/org/apache/solr/analysis/TestAdsabsTypeDateString.java index 2abbbc8d6..10bed1ee5 100644 --- a/contrib/adsabs/src/test/org/apache/solr/analysis/TestAdsabsTypeDateString.java +++ b/contrib/adsabs/src/test/org/apache/solr/analysis/TestAdsabsTypeDateString.java @@ -87,6 +87,7 @@ public void test() throws Exception { // test the query parser does the right thing //setDebug(true); + // added symbolic date math parsing assertQueryEquals(req("defType", "aqp", "q", "date:[\"1976-12-30T00:30:00Z\" TO \"1977-12-30T00:30:00Z\"]"), "date:[220753800000 TO 252289800000]", @@ -297,6 +298,14 @@ public void test() throws Exception { "//*[@numFound='125']" ); + /* + * symbolic date math + */ + + assertQ(req("q", "pubdate:[NOW-60YEARS TO *] foo", "qf", "title keyword"), + "//*[@numFound='1']" + ); + } }