0

我最近注意到 Lucene StandardAnalyzer 的行为自 3.1 版以来发生了一些变化。具体来说,3.0 和之前的版本将电子邮件、IP 地址、公司名称等识别为单独的词汇类型,而更高版本则不识别。

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

1:example@mail.com:0->16:<电子邮件>

2:127.0.0.1:17->26:<主机>

3:h&m:27->30:<公司>

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

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

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

3:127.0.0.1:17->26:<数字>

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

4

1 回答 1

1

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

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

于 2011-12-27T19:57:31.850 回答