2013-03-13 2 views
1

Мы используем API SolrNet для индексирования и поиска набора документов, который содержит три поля даты: Date1, Date2, Date3. C# класс имеет следующие определения для трех полехОшибка преобразования даты Solrnet

public DateTime? Date1{ get; set; } 
public DateTime? Date2{ get; set; } 
public DateTime? Date3{ get; set; } 

определения схемы Solr выглядит следующим образом:

<field name="Date1" type="date" indexed="false" stored="true" required="false"/> 
<field name="Date2" type="date" indexed="false" stored="true" required="false"/> 
<field name="Date3" type="date" indexed="false" stored="true" required="false"/> 

Когда мы выполняем запрос с документом, который уже проиндексирован, мы получаем следующие значения возвращаются в интерфейсе SolrAdmin:

<date name="Date1">0001-01-01T00:00:00Z</date> 
<date name="Date2">2010-04-10T08:21:18.281Z</date> 
<date name="Date3">2007-12-01T03:09:41.093Z</date> 

Но когда мы инспектировать C# объект, который получает возвращенное с SolrQueryResults, он показывает следующее:

Date1 : {01-01-0001 12:00:00 AM} 
Date2 : null 
Date3 : null 

Первая дата представляется как ожидаемое значение datetime min. Но почему другие даты получают нулевые значения, когда это допустимые даты в формате UTC?

Лучше хранить поля даты в виде строк в Solr и использовать поле для копирования, чтобы сохранить его в формате даты solr и использовать это поле для запросов диапазона дат?

+0

Убедитесь, что вы возвращаете поля date2 и Date3 в результатах запроса SolrNet. например Убедитесь, что вы не ограничиваете поля параметром '& fl' или используете requestHandler, который не включает эти поля. –

+0

Это именно то, что происходило с Пейджем. Я фильтровал поля, и даты не были добавлены. Как я могу принять ваш ответ? – koder

+0

Я поставлю свой комментарий в качестве ответа. –

ответ

2

Убедитесь, что вы возвращаете поля Date2 и Date3 в результатах запроса SolrNet. например Убедитесь, что вы не ограничиваете поля параметром &fl через SolrNet Fields QueryOptions или используете requestHandler на экземпляре Solr, который фильтрует поля и не включает эти поля.

0

Пожалуйста, попробуйте следующий код, Надеюсь, что это помогает

using SolrNet; 

    public List<ISolrQuery> BuildFitlerQuery(DateTime StartDate, DateTime EndDate, string FiledName) 
    { 
     var filter = new List<ISolrQuery>(); 

     if (EndDate.Year != 1)// Will create query when end date value is also send 
      filter.Add(new SolrQueryByRange<DateTime?>(FiledName, StartDate, EndDate)); 
     else 
      filter.Add(new SolrQueryByRange<DateTime?>(FiledName, StartDate, null)); 
     return filter; 

    } 

 Смежные вопросы

  • Нет связанных вопросов^_^