1.分析器 所有分析器最終繼承的類都是Analyzer
1.1 默認標准分析器:StandardAnalyzer
在我們創建索引的時候,我們使用到了IndexWriterConfig對象,在我們創建索引的過程當中,會經歷分析文檔的步驟,就是分詞的步驟,默認采用的標准分析器自動分詞
1.2 查看分析器的分析效果
public static void main(String[] args) throws IOException {
//1.創建一個Analyzer對象
Analyzer analyzer=new StandardAnalyzer();
//2.調用Analyzer對象的tokenStream方法獲取TokenStream對象,此對象包含了所有的分詞結果
TokenStream tokenStream = analyzer.tokenStream("", "The spring Framework provides a comprehensive programming and configuration model.");
//3.給tokenStream對象設置一個指針,指針在哪當前就在哪一個分詞上
CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
//4.調用tokenStream對象的reset方法,重置指針,不調用會報錯
tokenStream.reset();
//5.利用while循環,拿到分詞列表的結果 incrementToken方法返回值如果為false代表讀取完畢 true代表沒有讀取完畢
while (tokenStream.incrementToken()){
System.out.println(charTermAttribute.toString());
}
//6.關閉
tokenStream.close();
}
默認標准分析器分析英文沒有問題,但是他是怎么樣分析中文的?
1.2 中文分析器
第三方中文分析器:IKAnalyzer
IKAnalyzer的使用步驟:
1.導入依賴
<!-- https://mvnrepository.com/artifact/com.jianggujin/IKAnalyzer-lucene -->
<dependency>
<groupId>com.jianggujin</groupId>
<artifactId>IKAnalyzer-lucene</artifactId>
<version>8.0.0</version>
</dependency>
2.配置IKAnalyzer,導入配置文件
hotword.dic 擴展詞典,可以將時尚的網絡名詞放入到該詞典當中,這樣就能根據擴展詞典進行分詞
stopword.dic 停用詞詞典,可以將無意義的詞和敏感詞匯放入到該詞典當中,這樣在分析的時候就會忽略這些內容
在自定義擴展詞典和停用詞詞典的過程當中,千萬不要使用windows記事本編輯,因為windows記事本是UTF-8+BOM編碼
3.使用IKAnalyzer進行分詞
public static void main(String[] args) throws IOException {
//1.創建一個Analyzer對象
Analyzer analyzer=new IKAnalyzer();
//2.調用Analyzer對象的tokenStream方法獲取TokenStream對象,此對象包含了所有的分詞結果
TokenStream tokenStream = analyzer.tokenStream("", "五道口課工場安裝mysql-5.7.22-winx64后數據庫服務啟動報錯:本地計算機上的mysql服務啟動停止后,某些服務未由其他服務或程序使用時將自動停止而且mysql官網下載的壓縮包解壓出來沒有網線上安裝教... 博文 來自: 測試菜鳥在路上,呵呵");
//3.給tokenStream對象設置一個指針,指針在哪當前就在哪一個分詞上
CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
//4.調用tokenStream對象的reset方法,重置指針,不調用會報錯
tokenStream.reset();
//5.利用while循環,拿到分詞列表的結果 incrementToken方法返回值如果為false代表讀取完畢 true代表沒有讀取完畢
while (tokenStream.incrementToken()){
System.out.println(charTermAttribute.toString());
}
//6.關閉
tokenStream.close();
}
4.程序當中使用IKAnalyzer
IndexWriter indexWriter=new IndexWriter(directory,new IndexWriterConfig(new IKAnalyzer()));