我使用apache solr 4
,我是Solr
中的新用户,我想在两个日期之间进行查询,但我有一个关于时区的问题:如果我想查询一天,我会在前一天查询这一天。
String urlString = "http://localhost:8983/solr";
SolrServer solr = new CommonsHttpSolrServer(urlString);
QueryResponse rsp = solr.query( new SolrQuery("last_modified:[2013-01-03T00:00:00Z TO 2013-01-05T23:59:59Z]") );
SolrDocumentList docs = rsp.getResults();
for(int i=0;i<docs.getNumFound() ; i++) {
System.out.println (docs.get(i).getFieldValue("id"));
}
我搜索了一下,我找到了一条建议:
写+00:00而不是Z.例如,2002-10-10T12:00:00 + 05:00是2002-10-10T07:00:00Z
但是当我这样做时,我得到了例外:
QueryResponse rsp = solr.query( new SolrQuery("last_modified:[2013-01-03T00:00:00+04:00 TO 2013-01-05T23:59:59+04:00]") );
我该怎么做才能解决问题?
答案 0 :(得分:6)
可悲的是,Solr只支持Z
格式,据我所知,它不理解时区语法。
显然,您不是UTC,因此您希望将其转换为您的时区。最简单的方法是使用正确的语言环境在代码中执行此操作 - 例如计算您需要的任何范围的UTC时间。
SimpleDateFormat genericDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");
SimpleDateFormat dateFormatUTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
dateFormatUTC.setTimeZone(TimeZone.getTimeZone("UTC"));
Date start = genericDateFormat.parse("2013-01-03T00:00:00+0400");
Date end = genericDateFormat.parse("2013-01-03T23:59:59+0400");
String range = "[" + dateFormatUTC.format(start) + " TO " + dateFormatUTC.format(end) + "]";
range
将包含字符串[2013-01-02T20:00:00Z TO 2013-01-03T19:59:59Z]
,该字符串对应于UTC + 4中1月3日的整个日期。