初学solr在schema 里面配置并使用sorl的date或者tdate类型,具体类型与使用如下:
- <field name="tdate_field" type="tdate" indexed="true" stored="true" />
- <field name="date_field" type="date" indexed="true" stored="true" />
- <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/
- <!-- A Trie based date field for faster date range queries and date faceting. -->
- <fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/>
找到solr-crore包的org.apache.solr.schema.DateField代码:
- public static TimeZone UTC = TimeZone. getTimeZone( "UTC");
可以说,这是solr的一个坑,solr不提供时区配置的方式,只以" yyyy-MM-dd'T'HH:mm:ss'Z'"的时间格式返回xml或json的字符串,同时solr通过http传输,查询参数以字符串组装(好像只能以字符串方式建立主查询),例如:
- Date date = new Date();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'" );
- String queryTime = QueryRule.ONLINE_TIME + ":[" +sdf.format(date )+ " TO "+ "*]" ;
- query.setQuery(queryTime);
可以按如下方式解决:
- Date date = new Date();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy -MM-dd'T'HH:mm:ss'Z'");
- sdf.setTimeZone(TimeZone. getTimeZone( "UTC"));
- String queryTime = QueryRule.ONLINE_TIME + ":[" +sdf.format(date )+ " TO "+ "*]" ;
- query.setQuery(queryTime);
但是还有一点还是很别扭,solr在网页,还有xml,json上返回的时间,还是以UTC为时区,相差8小时。
扯了半天,你可能早就想到了,用啥Date类型,干脆用long存得了。