#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. «Причина, по которой я выполняю это преобразование часового пояса, заключается в том, что мне нужно сгруппировать результаты по часовому поясу пользователя. Как я могу этого добиться?» вторая часть моего вопроса была связана с этим .. извините, было неясно, может быть