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

use*_*013 12 java lucene date

是否可以使用Java中的Lucene搜索日期范围?如何根据日期字段和日期范围构建Lucene搜索查询?例如:

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

[编辑]我正在使用Lucene 2.4.1,我的系统真的很遗产,测试真的很差,所以如果可能的话我不想升级

ska*_*man 19

Lucene(无论如何在版本2.9之前)仅存储String值,并且它仅支持对该数据的词典范围查询.因此,如果要在其上存储日期/时间数据和执行范围查询,则需要以使其按字典顺序排序的方式显式格式化数据/时间值.

例如,将您的日期/时间存储为类似的内容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`. (8认同)