2011-12-27 66 views
0

我最近已經注意到Lucene StandardAnalyzer的行爲自3.1版本以來有所變化。具體來說,3.0和以前的版本將電子郵件,IP地址,公司名稱等視爲單獨的詞彙類型,而更高版本不會。Lucene StandardAnalyzer 3.5 TypeAttribute

例如,對於輸入的文本: 「[email protected] 127.0.0.1ħ&中號」 時,3.0分析器將認識以下幾種類型:

1:[email protected]:0- > 16:< EMAIL>

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

3:H &米:27-> 30:< COMPANY>

然而,版本3.1和更高版本給對於相同的輸入文本的輸出如下:

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

2:郵件.COM:8-> 16:< ALPHANUM>

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

我的問題是,我如何使用較新版本的Lucene庫實現舊的StandardAnalyzer行爲?是否有一些標準的TokenFilter可以幫助我實現這一點,還是我需要實現自定義過濾器?

回答

1

查看適用於StandardAnalyzer的javadoc:從3.1開始,StandardTokenizer實現Unicode文本分割.... ClassicTokenizer和ClassicAnalyzer是StandardTokenizer和StandardAnalyzer的3.1之前的實現。

或者,您可以將LUCENE_30版本傳遞給StandardAnalyzer,並且您還可以獲得以前的行爲。這就是這些版本常量的目的,以便行爲對現有用戶保持一致,並決定何時將您的應用升級到更改的行爲。