2014-09-25 110 views
0

如何使用SolrJ按日期請求?Solrj日期請求

我以這種格式'01/10/2014'作爲參數獲取日期。然後,我將這種格式轉換爲Date對象並將該對象轉換爲UTC格式。下面是我在做什麼的代碼示例:

public class DateHelper { 
    public static final String DD_MM_YYYY_FORMAT = "dd/MM/yyyy"; 
    public static final String SOLR_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; 

    public static Date getDateFromString(String date, String format) { 
     if (StringUtils.isNotEmpty(date)) { 
      try { 
       return FastDateFormat.getInstance(format).parse(date); 
      } catch (ParseException e) { 
       LOGGER.error(e.getMessage()); 
      } 
     } 
     return null; 
    } 

    public static String getStringFromDate(Date date, String format) { 
     if (date != null) { 
      try { 
       return FastDateFormat.getInstance(format).format(date); 
      } catch (Exception e) { 
       LOGGER.error(e.getMessage()); 
      } 
     } 
     return ""; 
    }   

    public static void main(String...args){ 
     Date dateFromString = DateHelper.getDateFromString('01/10/2014', DateHelper.DD_MM_YYYY_FORMAT); 
     String date = DateHelper.getStringFromDate(dateFromString, DateHelper.SOLR_DATE_FORMAT); 
     System.out.println(date); 
    } 
} 

這個小程序顯示「2014-10-01T00:00:00Z」。當我試圖使用過濾器的查詢Solr中提交這個日期,我收到此錯誤SORL:

org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: Invalid Date String:'2014-10-01T00' 

這裏是我的Solr查詢:

SolrQuery solrQuery = new SolrQuery("*:*"); 
String date = String.format("date:%s",dateInput); 
query.addFilterQuery(date); 

getSolrServer().query(solrQuery, METHOD.POST); 

我怎樣才能解決這個問題? THx爲您提供幫助。

P.S:類FastDateFormat來自Apache Commons Lang 3.我使用的是solr 4.8.1版本。

回答

2

出現這種情況的原因filterQuery的創建方式:

String date = String.format("date:%s",dateInput); 
query.addFilterQuery(date); 

這樣Solr的獲取:

date:2014-10-01T00:00:00Z 

和異常由於Query Parser無法正確解析的多個:符號而被拋出。


爲了解決這個問題,Query Syntax的特殊字符應該被轉義。

從Java端是可以做到這樣(用ClientUtils.escapeQueryChars從SolrJ):

String date = String.format("date:%s", ClientUtils.escapeQueryChars(dateInput)); 
query.addFilterQuery(date); 
+0

THX的評論。我正在面對Solr日期的另一個問題。默認情況下,日期以UTC格式存儲在Solr中。但是當我從Solr獲得特定的字段日期時,solrj會將它轉換爲CEST時區。您可以在這裏獲得更多詳細信息:http://stackoverflow.com/questions/26065611/solr-formats-my-dates-from-utc-to-cest/26067269#26067269。任何幫助,將不勝感激 – Dimitri 2014-09-28 21:14:14

0

語法來查詢Solr的日期字段 - Date:[YYYY-MM-DDTHH:mm:ssZ]