Lucene StandardAnalyzer 3.5 TypeAttribute

时间:2011-12-27 12:26:36

标签: lucene analyzer

我最近注意到自3.1版以来Lucene StandardAnalyzer的行为有所改变。具体而言,3.0及以前版本将电子邮件,IP地址,公司名称等识别为单独的词汇类型,而后来的版本则不然。

例如,对于输入文本:“ example@mail.com 127.0.0.1 H& M ”,3.0分析器将识别以下类型:

1:example@mail.com:0-> 16:< EMAIL >

2:127.0.0.1:17-> 26:< HOST >

3:h& m:27-> 30:< COMPANY >

但是,版本3.1及更高版本为相同的输入文本提供以下输出:

1:示例:0-> 7:< ALPHANUM >

2:mail.com:8-> 16:< ALPHANUM >

3:127.0.0.1:17-> 26:< NUM >

我的问题是,如何使用较新版本的Lucene库实现旧的StandardAnalyzer行为?是否有一些标准的TokenFilter可以帮助我实现这一目标,还是需要实现自定义过滤器?

1 个答案:

答案 0 :(得分:1)

请参阅StandardAnalyzer的javadoc:从3.1开始,StandardTokenizer实现了Unicode文本分段.... ClassicTokenizer和ClassicAnalyzer是StandardTokenizer和StandardAnalyzer的3.1之前的实现。

或者,您可以将LUCENE_30版本传递给StandardAnalyzer,您也可以获得之前的行为。这就是这些版本常量的目的,因此行为对于现有用户保持一致,并且您决定何时将应用程序升级为更改的行为。