如何在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子句中提供日期的确切方法是什么?
谢谢。
最好的方法是使用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存储的