在Java中使用Lucene搜索日期范围?

12

在Java中使用Lucene,是否可以按日期范围进行搜索? 如何基于日期字段和日期范围构建Lucene搜索查询? 例如:

  • 在指定日期之间
  • 在指定日期之前
  • 在指定日期之后
  • 在过去的24小时内
  • 在过去的一周内
  • 在过去一个月内。

[编辑] 我正在使用Lucene 2.4.1,并且我的系统非常老旧且未经充分测试,因此如果可能,我希望不必升级。


1
是的,这是可能的。如果你需要一些样本代码,我可以为你找到一些 - 只需在此帖子下评论请求即可。看一下《Lucene实战》- 你可以在那里找到这个问题和许多其他问题的答案。 - Ilya Khaprov
1个回答

19

Lucene (版本号在2.9之前) 只支持存储字符串类型的值,并且只能在该数据上支持字典排序范围查询。因此,如果您想要存储日期/时间数据并执行范围查询,则需要明确地按某种方式格式化您的日期/时间值,以使它们按字典顺序排列。

例如,将日期/时间存储为类似于2009-10-29T15:34:00这样的形式,然后进行范围查询,如 [2009-10-29T15:00:00 TO 2009-10-29T16:00:00]

正如其他地方指出的那样,Lucene 2.9 最终引入了对非字符串数据的范围查询支持,使得这一切变得更加容易。


8
使用DateTools.dateToString(date, Resolution.SECOND)方法可以帮助您生成Lucene格式的日期字符串,类似于20110223220000,表示为2011-02-23 22:00:00 - bekce

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接