2

RavenHQに次のインデックスがあります

from doc in docs 
let Tag = doc["@metadata"]["Raven-Entity-Name"]
where  Tag != null && Tag=="Email"
select new { Tag, LastModified = (DateTime)doc["@metadata"]["LastModified"], DateAdded=doc.DateAdded };

また、DateAdded Indexing を Analyzed として作成しました。where 句に日付未満の基準を含む Lucene クエリを作成したいと考えています。

以下を試してみましたが、うまくいきませんでした。

Where("DateAdded: [NULL TO 2012-12-31").ToList()

C# で where 句に日付を指定する正確な方法は何ですか。

ありがとう。

4

1 に答える 1

5

最良の方法は、自分でクエリを作成する代わりに、Raven の API を使用することです。

var date = new DateTime(2012, 12, 31, 0, 0, 0, DateTimeKind.Utc);
session.Advanced.LuceneQuery<object>().WhereLessThan("LastModified", date);

自分でやらなければならない場合は、次のようになります。

session.Advanced.LuceneQuery<object>()
                .Where("LastModified: {NULL TO 2012-12-31T00:00:00.0000000Z}")

Raven は、から取得されるラウンド トリップ形式によって提供されるように、 ISO8601日時形式と組み合わせたLucene 範囲クエリ構文を小数点以下 7 桁まで使用します。dateTime.ToString("o")

あなたが「より小さい」と言ったことに注意しください{ TO }。「以下」が必要な場合は、代わりに括弧を使用します。[ TO ]

]質問で提供したクエリは、末尾の文字を含めていれば機能していました。LastModifiedただし、時間コンポーネントを含むすべてのエントリは、指定した値の後に落ちていたため、探していたものではありませんでした。

また、LastModifiedメタデータは UTC として保存されることに注意してください。

于 2013-03-16T16:01:42.907 に答える