我们使用Lucene为交付给用户的数据开发一个免费的文本搜索框,就像电子邮件收件箱一样。我们希望允许该框处理日期,例如5/1/2011。为了方便起见,我们限制了功能的当前版本,只留下两个日期格式:如何在Lucene自由文本搜索查询中检测日期?
mm/dd/yy
mm/dd/yyyy
对于我们的原型,我们砍死查询分析过程来试图预先处理的查询字符串来寻找这两个日期模式。这是大约2年前,我们在Lucene 2.4上。我很好奇,看看Lucene中是否有任何工具可以接受DateFormat并返回带有任何标识日期的TokenStream。通过javadoc,了解Lucene的2.9看,我发现类:
org.apache.lucene.analysis.sinks.DateRecognizerSinkFilter
这似乎做我所需要的,但它实现了SinkFilter,这似乎并没有在Lucene的维基记录在案的概念。有没有人使用过滤器之前,如果是这样,什么是最有效的方式来使用它?
感谢您的回复!我会尝试解决您的解决方案并发布我的结果。 – 2011-06-16 20:27:40
太棒了!您也可以将其作为一个常规的内嵌式标记器来实现,该标记器将原始字符串和日期放在同一位置。这样,例如,如果您的日期格式有月份或日期名称,那么您仍然可以直接搜索这些日期格式。 – 2011-06-16 21:15:04