我在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子句中日期的确切方式是什么。
谢谢。
发布于 2013-03-16 16:01:42
最好的方法是使用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 datetime格式到小数点7位,这是从dateTime.ToString("o")获得的往返格式提供的。
请注意,您说的“小于”,所以我使用了独家括号{ TO }。如果您希望“小于或等于”,则应该使用包含式方括号[ TO ]。
如果包含了结尾的]字符,那么问题中提供的查询就会有效。但是,它不会是您所要寻找的,因为任何包含时间组件的LastModified条目都会在您指定的值之后下降。
还要注意,LastModified元数据是以UTC的形式存储的。
https://stackoverflow.com/questions/15447290
复制相似问题