首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在RavenDB Lucene查询中包含日期条件

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

Stack Overflow用户
提问于 2013-03-16 08:38:00
回答 1查看 2.3K关注 0票数 2

我在RavenHQ中有以下索引

代码语言:javascript
复制
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子句中的小于日期条件。

我试过跟踪,但没成功。

代码语言:javascript
复制
Where("DateAdded: [NULL TO 2012-12-31").ToList()

在C#中提供where子句中日期的确切方式是什么。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-16 16:01:42

最好的方法是使用Raven的API,而不是自己构建查询:

代码语言:javascript
复制
var date = new DateTime(2012, 12, 31, 0, 0, 0, DateTimeKind.Utc);
session.Advanced.LuceneQuery<object>().WhereLessThan("LastModified", date);

如果你必须自己做这件事,就像这样:

代码语言:javascript
复制
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的形式存储的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15447290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档