你如何使用Lucene查询包含日期的ravendb索引?

时间:2012-09-17 12:19:03

标签: lucene ravendb

我使用http api来查询ravendb(因此LINQ查询不是我问题的解决方案)。 我的产品文档如下所示:

{
  "editDate": "2012-08-29T15:00:00.846Z"
}

我有索引:

from doc in docs.Product
select new { doc.editDate }

我想在特定日期和时间之前查询所有文档。我可以使用以下语法在DATE查询:

editDate: [NULL TO 2012-09-17]

然而,我无法弄清楚如何查询时间组件。 有什么想法吗?

2 个答案:

答案 0 :(得分:5)

您可以使用以下方式查询:

 editDate: [NULL TO 2012-09-17T15:00:00.846Z]

如果您关心其中的一部分,请使用:

 editDate: [NULL TO 2012-09-17T15:00]

请注意,您可能必须转义部分查询,如下所示:

 editDate: [NULL TO 2012\-09\-17T15\:00]

为此,您还需要确保分析该字段。 在Raven Studio中 - 添加字段 - > editDate,并将Indexing设置为Analyzed。

答案 1 :(得分:-1)

解决此问题的一种方法是将值存储为日期,而不是自unix时代以来的秒数。

这会产生一个可以轻松比较的数字。

我正在使用javascript和片刻js库:

{
  "editDate": "2012-08-29T15:00:00.846Z",
  "editDateUnix": moment("2012-08-29T15:00:00.846Z").unix()
}

我的索引:

from doc in docs.Product
select new { doc.editDate, doc.editDateUnix }

和我的lucene查询:

"editDate: [NULL TO "+moment("2012-09-17").unix()+"]"