Solr: org.apache.solr.common.SolrException: неверная строка даты:
Я новичок в 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) в орг.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:277)
Из некоторых статей я понимаю, что Solr хранит время только в UTC, это запрос, который я пытаюсь проиндексировать,
Выберите id, текст, "язык", ссылки,tweetType, источник, местоположение, биографию, URL,utcOffset,timeZone,frenCnt,creationAt,creationOnGMT,creationOnServerTime,follCnt,favCnt,totStatusCnt,usrCrtDate,humanSentiment, отвеченный, классифицированное местоположение, ответ, geonameid, страна, континент,placeLongitude,placeLatitude, selectedCnt,hashtag, упоминания,senderInfScr, creationOnGMTDate,DATE_FORMAT(CONVERT_TZ(creationOnGMTDate,'+00:00','+05:30'),'%Y-%m-%d') в качестве IST,DATE_FORMAT(CONVERT_TZ(создал OnGMTDate,'+00:00','+01:00'),'%Y-%m-%d') в качестве ECT,DATE_FORMAT(CONVERT_TZ(созданный OnGMTDate,'+00:00','+02:00'),'%Y-%m-%d') как EET,DATE_FORMAT(CONVERT_TZ(creationOnGMTDate,'+00:00','+03:30'),'%Y-%m-%d') как MET, знак (классифицированный) как настроение от
Почему я делаю это преобразование часового пояса, потому что мне нужно сгруппировать результаты по часовому поясу пользователя. Как я могу достичь этого?
С уважением, Рохит
2 ответа
Оформление даты полностью зависит от параметров запроса, поэтому, если мы индексируем ваши события, используя "истинное" время, в которое они произошли (отформатированный как строка в формате UTC), вы можете выбрать диапазоны дат, используя любое смещение часового пояса, указанное вашим пользователем в время запроса как смещение UTC.
facet.range = dateField
facet.range.start = 2011-01-01T00:00:00Z+${useroffset}MINUTES
facet.range.gap = +1DAY
Это вернет результат в часовом поясе пользователя, и фактически нет необходимости преобразовывать часовой пояс в запрос и индексировать этот столбец отдельно.
С уважением, Рохит
Кредит за ответ: Крис Хостеттер (группа пользователей Solr)
Соль даты должны быть в форме 1995-12-31T23:59:59Z
, Вы даете только часть даты, но не время.
См. DateField Javadocs для более подробной информации.