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 для более подробной информации.

Другие вопросы по тегам