1

我们正在使用 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 日期格式并将此字段用于日期范围查询是否更好?

4

2 回答 2

2

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

于 2013-03-13T15:29:10.123 回答
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;

    }
于 2017-10-11T14:28:53.720 回答