Solrnet日期转换问题

时间:2013-03-13 14:54:13

标签: solrnet

我们正在使用SolrNet API索引和搜索包含三个日期字段的一组文档:Date1,Date2,Date3。 C#类对三个字段具有以下定义

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日期格式并使用此字段进行日期范围查询吗?

2 个答案:

答案 0 :(得分:2)

检查您是否在SolrNet查询结果中返回Date2和Date3字段。例如确保您没有通过SolrNet &fl QueryOptions限制带有Fields参数的字段,或者使用Solr实例上的requestHandler来过滤字段,但不包括这些字段。

答案 1 :(得分: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;

    }