1

SolrNet APIを使用して、Date1、Date2、Date3の3つの日付フィールドを含む一連のドキュメントのインデックス作成と検索を行っています。C#クラスには、3つのフィールドに対して次の定義があります

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形式の有効な日付であるのに、なぜ他の日付がnull値を取得するのでしょうか。

日付フィールドを文字列として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 に答える