【问题标题】:Searching on date ranges with Lucene in Java?在 Java 中使用 Lucene 搜索日期范围?
【发布时间】:2013-04-18 23:15:46
【问题描述】:

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

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

[编辑] 我使用的是 Lucene 2.4.1,而我的系统确实很旧,而且测试很差,所以如果可能的话,我希望不必升级

【问题讨论】:

  • 是的,这是可能的。如果您需要一些示例代码,我会为您找到一些 - 只需在这篇文章的评论中询问。看看 Lucene in Action - 你可以找到这个问题的答案,也可以找到许多其他问题的答案。

标签: java lucene date


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多