Solrj日期请求
问题描述:
如何使用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版本。
答
出现这种情况的原因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);
答
语法来查询Solr的日期字段 - Date:[YYYY-MM-DDTHH:mm:ssZ]
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