天天看點

Lucene的分析器了解

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的集合變小。更利于同義詞寫入。

Lucene的分析器了解