Analyizer是用來分析文本的核心抽象類。它的傳回是TokenStream,用來周遊所有的Token。該類的抽象核心方法是
TokenStream tokenStream(String field,Reader reader){
1.利用依賴的Tokenizer對象獲得最初的TokenStream。
2.利用TokenFilter層層過濾初始TokenStream并傳回。
}
Lucene封裝了幾個Analyzer實作類。當然使用者可以根據自己的應用程式去定制Analyzer。Lucene内置的幾個現成的類中,最有用的是StantAnalyzer和StopAnalyzer。其它的幾個象WhiteSpaceAnalyzer以及SimpleAnalyzer都是用來單元測試的。沒有實際的使用價值。
自定義的場景比如自己根據應用提供了停用詞集合。而不是預設的StopFilter包含的那些this, that,at等停用詞。
TokenFilter的順序還是比較重要的
1.順序錯誤,影響的結果一個是Filter可能不起使用了。
LowerCaseToTokenizer=LowerCaseFilter+ LetterTokenizer , 前者效率更高,在分詞的時候就做了小寫轉換。
StopFilter->LowerCaseFilter->LetterTokenizer 對于字元串" The day come" 過濾的結果是day come
而LowerCaseFilter->StopFilter->LetterTokenizer 的結果是the day come。注意到the變成了小寫傳回,并沒有過濾,原因就是Filter的順序打亂後,StopFilter由于是大小寫敏感,是以無法過濾The導緻。
2.順序另一個影響是性能。
比如StopFilter+同義詞寫入與同義詞寫入+StopFilter的性能是完全不同的。先通過StopFilter做一些減法會讓TokenStream的集合變小。更利于同義詞寫入。
