Solr: org.apache.solr.common.SolrException: недопустимая строка даты:

#solr #convert-tz

#solr #преобразовать-tz

Вопрос:

Я новичок в 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, это запрос, который я пытаюсь проиндексировать,

Выберите идентификатор, текст, «язык», ссылки, тип твита, источник, местоположение, bio,url,utcOffset,timeZone,frenCnt,createdAt,createdOnGMT,createdOnServerTime,follCnt,favCnt,totStatusCnt,usrCrtDate,humanSentiment,replied,replyMsg,classified,locationDetail, идентификатор геонамея,страна, континент, длина места, широта места, listedCnt, хэштег, упоминания, senderInfScr, дата создания,DATE_FORMAT(CONVERT_TZ(дата создания,’ 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’) как ВЫПОЛНЕННОЕ, подписать (классифицировано) как мнение из

Почему я делаю это преобразование часового пояса, потому что мне нужно сгруппировать результаты по часовому поясу пользователя. Как я могу этого добиться?

С уважением, Рохит

Ответ №1:

Даты Solr должны быть в форме 1995-12-31T23:59:59Z . Вы указываете только часть даты, но не время.

Смотрите javadocs с DateField для получения более подробной информации.

Комментарии:

1. Спасибо за ответ, на самом деле чего нам нужно добиться, так это увидеть группировку по результатам на основе таких дат, как 2011-01-01 23 2011-01-02 14 2011-01-03 40 2011-01-04 10 Теперь записей в моей таблице насчитывается миллионы, группировка результата на основе даты UTC не даст правильного результата, поскольку результат должен быть сгруппирован по часовому поясу пользователя. Можем ли мы каким-либо образом достичь этого в Solr?

2. @rohitgu: вам нужно указать даты Solr в этом формате для индексации. Другого способа нет. Поэтому переведите все в UTC, и когда вы получите результаты, вернитесь к тому часовому поясу, который необходим.

Ответ №2:

Огранка даты полностью определяется параметрами запроса, поэтому, если мы индексируем ваши события, используя «истинное» время, в которое они произошли (отформатированное как строка в UTC), вы можете затем выбрать свои диапазоны дат, используя любое смещение часового пояса, указанное вашим пользователем во время запроса в качестве смещения UTC.

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

Это вернет результат в пользовательском часовом поясе, и на самом деле нет необходимости преобразовывать запрос в часовой пояс и индексировать этот столбец отдельно.

С уважением, Рохит

Автор ответа: Крис Хостеттер (группа пользователей Solr)

Комментарии:

1. Почему вы сами отвечаете (и приветствуете), когда я дал правильный ответ на ваше исключение? Более того, этот ответ совершенно не связан с исключением в вашем собственном вопросе!

2. Я вижу, вы скопировали ответ Криса Хостеттера в solr-user здесь, но этот ответ был на другой вопрос

3. «Причина, по которой я выполняю это преобразование часового пояса, заключается в том, что мне нужно сгруппировать результаты по часовому поясу пользователя. Как я могу этого добиться?» вторая часть моего вопроса была связана с этим .. извините, было неясно, может быть