2013-03-13 132 views
1

我們使用SolrNet API來索引和搜索包含三個日期字段的文檔集合: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> 

但是,當我們考察其獲取與SolrQueryResults返回的C#對象,它顯示以下內容:

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

第一個日期表示爲預期的日期時間最小值。但爲什麼其他日期在UTC格式的有效日期中獲得空值?

將日期字段作爲字符串存儲在Solr中並使用副本字段將其存儲在solr日期格式中並將此字段用於日期範圍查詢是否更好?

+0

檢查所換來對你SolrNet查詢結果的日期2和DATE3領域。例如確保你沒有用'&fl'參數限制字段,或者使用不包含這些字段的requestHandler。 – 2013-03-13 14:57:21

+0

這正是Paige發生的情況。我正在過濾字段,並沒有添加日期。我怎樣才能接受你的答案? – koder 2013-03-13 15:18:43

+0

我會把我的評論作爲答案。 – 2013-03-13 15:30:14

回答

2

檢查您是否返回SolrNet查詢結果中的Date2和Date3字段。例如確保您沒有通過SolrNet Fields QueryOptions或在Solr實例上使用requestHandler來限制字段的&fl參數,該實例正在過濾字段並且不包含這些字段。

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; 

    }