【问题标题】:Solr: org.apache.solr.common.SolrException: Invalid Date String:Solr:org.apache.solr.common.SolrException:无效的日期字符串:
【发布时间】:2011-08-19 13:35:51
【问题描述】:

我是 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,分类,locationDetail, geonameid,country,continent,placeLongitude,placeLatitude,listedCnt,hashtag,mentions,senderInfScr, createdOnGMTDate,DATE_FORMAT(CONVERT_TZ(createdOnGMTDate,'+00:00','+05:30'),'%Y-% m-%d') as IST,DATE_FORMAT(CONVERT_TZ(createdOnGMTDate,'+00:00','+01:00'),'%Y-%m-%d') as ECT,DATE_FORMAT(CONVERT_TZ(createdOnGMTDate, '+00:00','+02:00'),'%Y-%m-%d') as EET,DATE_FORMAT(CONVERT_TZ(createdOnGMTDate,'+00:00','+03:30'), '%Y-%m-%d') 为 MET,符号(分类)为来自

的情绪

我为什么要进行此时区转换是因为我需要按用户时区对结果进行分组。我怎样才能做到这一点?

问候, 罗希特

【问题讨论】:

    标签: solr convert-tz


    【解决方案1】:

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

    facet.range = dateField
    facet.range.start = 2011-01-01T00:00:00Z+${useroffset}MINUTES
    facet.range.gap = +1DAY
    

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

    问候, 罗希特

    感谢答案:Chris Hostetter(Solr 用户组)

    【讨论】:

    • 当我对您的异常给出正确答案时,您为什么要回答(并打招呼)自己?此外,这个答案与您自己问题中的异常完全无关!
    • 我看到您在此处的 solr-user 中复制了 Chris Hostetter 的答案,但该答案是针对一个不同的问题...
    • "我为什么要进行这个时区转换是因为我需要按用户时区对结果进行分组。我该如何实现呢?"我的问题的第二部分与此有关。抱歉不清楚可能是
    【解决方案2】:

    Solr 日期必须采用1995-12-31T23:59:59Z 的形式。你只给出日期部分,而不是时间。

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

    【讨论】:

    • 感谢您的回复,实际上我们需要实现的是根据日期查看分组结果,例如,2011-01-01 23 2011-01-02 14 2011-01-03 40 2011-01 -04 10 现在我的表中的记录达到数百万,根据 UTC 日期对结果进行分组不会产生正确的结果,因为结果应该按用户时区分组。无论如何我们可以在 Solr 中实现这一点吗?
    • @rohitgu:您需要以这种格式提供 Solr 日期以进行索引。没有其他办法。因此,将所有内容都转换为 UTC,当您返回结果时,将转换回所需的任何时区。
    猜你喜欢
    • 2016-11-04
    • 1970-01-01
    • 2019-04-06
    • 2013-04-03
    • 2021-04-26
    • 2016-02-20
    • 2015-07-23
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多