Is it possible to search on date ranges using Lucene in Java? How do I build Lucene search queries based on date fields and dates ranges? For example:
- between specified dates
- prior to a specified date
- after a specified date
- within the last 24 hours
- within the past week
- within the past month.
[Edit] i'm using Lucene 2.4.1 and my system is really legacy and really poorly tested so i would like if possible not to have to upgrade
Lucene (before version 2.9 anyway) only stores String values, and it only supports lexicographical range queries on that data. So if you want to store date/time data and performa range queries on it, you need to explicitly format your data/time values in such a way as to make them lexicographically ordered.
For example, store your date/times as something like
2009-10-29T15:34:00
, and then do range queries like[2009-10-29T15:00:00 TO 2009-10-29T16:00:00]
As has been pointed out elsewhere, Lucene 2.9 finally introduced support for range queries against non-string data, making this all rather easier.