如何在RavenDB Lucene查询中包含日期条件

本文关键字:包含 日期 条件 查询 Lucene RavenDB | 更新日期: 2023-09-27 18:04:06

我在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索引作为分析。我想写一个Lucene查询,其中包括小于日期条件在where子句。

我试着跟随,但是没有成功。

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

在c#中where子句中提供日期的确切方法是什么?

谢谢。

如何在RavenDB Lucene查询中包含日期条件

最好的方法是使用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使用Lucene范围查询语法与ISO8601日期时间格式配对到小数点后7位,如从dateTime.ToString("o")获得的Round Trip格式所提供的。

注意,您说的是"小于",所以我使用了排他的括号{ TO }。如果你想要"小于或等于",那么你可以使用包括括号[ TO ]代替。

如果包含结尾的]字符,您在问题中提供的查询就可以工作。但是,这可能不是您想要的,因为任何带有时间组件的LastModified条目都会落在您指定的值之后。

还要注意LastModified元数据是作为UTC存储的