我是solr的新手,这是我第一次尝试索引solr数据,我在索引时遇到以下异常,
org.apache.solr.common.SolrException:无效的日期字符串:'2011-01-07' 在org.apache.solr.schema.DateField.parseMath(DateField.java:165) 在org.apache.solr.schema.TrieDateField.createField(TrieDateField.java:169) 在org.apache.solr.schema.SchemaField.createField(SchemaField.java:98) 在org.apache.solr.update.DocumentBuilder.addField(DocumentBuilder.java:204) 在org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:277)
我从阅读一些文章中了解到Solr只在UTC中存储时间,这是我想要索引的查询,
选择id,text,'language',links,tweetType,source,location,bio,url,utcOffset,timeZone,frenCnt,createdAt,createdOnGMT,createdOnServerTime,follCnt,favCnt,totStatusCnt,usrCrtDate,humanSentiment,replied,replyMsg, classified,locationDetail,geonameid,country,continent,placeLongitude,placeLatitude,listedCnt,hashtag,mentions,senderInfScr,createdOnGMTDate,DATE_FORMAT(CONVERT_TZ(createdOnGMTDate,'+ 00:00','+ 05:30'),'%Y-% m-%d')作为IST,DATE_FORMAT(CONVERT_TZ(createdOnGMTDate,'+ 00:00','+ 01:00'),'%Y-%m-%d')为ECT,DATE_FORMAT(CONVERT_TZ(createdOnGMTDate, '+ 00:00','+ 02:00'),'%Y-%m-%d')为EET,DATE_FORMAT(CONVERT_TZ(createdOnGMTDate,'+ 00:00','+ 03:30'), '%Y-%m-%d')为MET,从
中签名(分类)为情绪
为什么我要进行此时区转换是因为我需要按用户时区对结果进行分组。我怎样才能做到这一点?
此致 罗希特夏尔
答案 0 :(得分:16)
Solr日期必须采用1995-12-31T23:59:59Z
格式。你只提供日期部分,而不是时间。
有关详细信息,请参阅DateField javadocs。
答案 1 :(得分:-3)
日期分面完全由查询参数驱动,因此如果我们使用它们发生的“真实”时间索引您的事件(格式化为UTC中的字符串),则可以使用指定的任何时区偏移量来选择日期范围。您的用户在查询时作为UTC偏移。
facet.range = dateField
facet.range.start = 2011-01-01T00:00:00Z+${useroffset}MINUTES
facet.range.gap = +1DAY
这将返回用户时区的结果,实际上不需要对查询进行时区转换并单独索引该列。
此致 罗希特夏尔
获得答案:Chris Hostetter(Solr用户组)