在Java中使用Lucene,是否可以按日期范围进行搜索? 如何基于日期字段和日期范围构建Lucene搜索查询? 例如:
- 在指定日期之间
- 在指定日期之前
- 在指定日期之后
- 在过去的24小时内
- 在过去的一周内
- 在过去一个月内。
[编辑] 我正在使用Lucene 2.4.1,并且我的系统非常老旧且未经充分测试,因此如果可能,我希望不必升级。
在Java中使用Lucene,是否可以按日期范围进行搜索? 如何基于日期字段和日期范围构建Lucene搜索查询? 例如:
[编辑] 我正在使用Lucene 2.4.1,并且我的系统非常老旧且未经充分测试,因此如果可能,我希望不必升级。
Lucene (版本号在2.9之前) 只支持存储字符串类型的值,并且只能在该数据上支持字典排序范围查询。因此,如果您想要存储日期/时间数据并执行范围查询,则需要明确地按某种方式格式化您的日期/时间值,以使它们按字典顺序排列。
例如,将日期/时间存储为类似于2009-10-29T15:34:00
这样的形式,然后进行范围查询,如 [2009-10-29T15:00:00 TO 2009-10-29T16:00:00]
正如其他地方指出的那样,Lucene 2.9 最终引入了对非字符串数据的范围查询支持,使得这一切变得更加容易。
DateTools.dateToString(date, Resolution.SECOND)
方法可以帮助您生成Lucene格式的日期字符串,类似于20110223220000
,表示为2011-02-23 22:00:00
。 - bekce