Solr:org.apache.solr.common.SolrException:无效的日期字符串:

ses*_*mic 6 solr convert-tz

我是solr的新手,这是我第一次尝试索引solr数据,我在索引时得到以下异常,

org.apache.solr.common.SolrException:无效的日期字符串:在org.apache.solr.schema.TrieDateField的org.apache.solr.schema.DateField.parseMath(DateField.java:165)中的'2011-01-07' .orgateField(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,文本,'language',链接,tweetType,source,location,bio,url,utcOffset,timeZone,frenCnt,createdAt,createdOnGMT,createdOnServerTime,follCnt,favCnt,totStatusCnt,usrCrtDate,humanSentiment,replyly,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,签名(分类)为来自的情绪

我为什么要进行此时区转换是因为我需要按用户时区对结果进行分组.我怎样才能实现这一目标?

此致,罗希特

Mau*_*fer 16

Solr日期必须在表格中1995-12-31T23:59:59Z.你只提供日期部分,而不是时间.

有关更多详细信息,请参阅DateField javadocs.

  • @rohitgu:你需要**以这种格式给索尔日期索引.没有其他办法.因此,将所有内容转移到UTC,当您返回时,结果会转回到需要的任何时区. (3认同)

ses*_*mic -2

日期分面完全由查询参数驱动,因此,如果我们使用事件发生的“真实”时间(格式为 UTC 中的字符串)对事件进行索引,则您可以使用用户指定的任何时区偏移量来选择日期范围以 UTC 偏移量表示的查询时间。

facet.range = dateField
facet.range.start = 2011-01-01T00:00:00Z+${useroffset}MINUTES
facet.range.gap = +1DAY
Run Code Online (Sandbox Code Playgroud)

这将返回用户时区的结果,实际上不需要对查询进行时区转换并单独对该列建立索引。

问候, 罗希特

回答者:Chris Hostetter(Solr 用户组)