2012-09-17 50 views
5

我正在使用http api查詢ravendb(所以LINQ查詢不是我的問題的解決方案)。 我的產品文件看起來是這樣的:如何使用Lucene查詢包含日期的ravendb索引?

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

和我有指數:

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

我想一定日期和時間之前查詢所有文件。我可以使用以下語法在DATE查詢:

editDate: [NULL TO 2012-09-17] 

但是我不知道如何查詢時間組件。 有什麼建議嗎?

回答

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,並將索引設置爲Analyzed。

+0

是的,它需要逃脫,但這仍然不適用於我。如果日期較長(2012-09-18T15:00),則會找到該文檔,但如果是同一天但在當天晚些時候(2012-09-17T15:30),則找不到該文檔。 –

+0

想通了 - 需要對字段進行分析,你如何使用http api設置它? (在文檔中找不到) –

+0

這是不好的建議。日期字段不應該被分析。 –

-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()+"]" 
+0

這是否解決您的問題,或者你在尋找更多的答案? – MattDavey

+0

它確實解決了它,但是如果有另一種方法來做到這一點,那麼我很想知道它是什麼! –