我们正在使用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日期格式并使用此字段进行日期范围查询吗?
答案 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;
}