我们正在使用Lucene为发送给用户的数据开发一个自由文本搜索框,就像电子邮件收件箱一样.我们想允许盒子处理日期,例如2011年5月1日.为了简化操作,我们将功能的当前版本限制为两种日期格式:
mm/dd/yy
mm/dd/yyyy
Run Code Online (Sandbox Code Playgroud)
对于我们的原型,我们破解了查询分析过程,试图预处理查询字符串以查找这两个日期模式.这是大约2年前,我们在Lucene 2.4.我很好奇,看看Lucene中是否有任何开箱即用的工具可以接受DateFormat并返回任何已识别日期的TokenStream.浏览Lucene 2.9的javadocs,我找到了这个类:
org.apache.lucene.analysis.sinks.DateRecognizerSinkFilter
Run Code Online (Sandbox Code Playgroud)
这似乎做了我需要的,但它实现了一个SinkFilter,这个概念似乎没有在Lucene Wiki中记录.有没有人之前使用过这个过滤器,如果有的话,最有效的方法是什么?
TeeSinkTokenFilter的文档中有一些示例代码(不可否认,过于复杂)。请注意,DateRecognizerSinkFilter 的设计方式并不存储实际日期;它只是检测令牌是符合指定格式的日期。我要尝试的是重新实现 DateRecognizerSinkFilter 类以获取 DateFormat 实例数组,创建一个名为 DateAttribute (或类似的)的新 Attribute 类,并使用日期识别器子类将解析的日期设置为 DateAttribute (如果满足以下条件之一)它的格式匹配。这样,您始终可以通过询问 DateAttribute 来测试是否具有有效日期,并将日期格式本地化为一个类。另一个优点是您不必处理多个接收器,从而简化了链接示例中的代码。
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |