Elasticsearch學習記錄+ik分詞器

前面提要

1.ES中API的端口號是9300而不是9200。

2.ES系統中Elasticsearch.yml配置文件中要加入network.host: 0.0.0.0,否則外網地址訪問不了。

3.最新的資料一定要去官網上面查看,博客上面好多都是過時的。官網地址:https://www.elastic.co

4.注意JDK、ES、Springboot三者之間的版本,很多時候錯誤都是版本衝突引起的。

 

安裝ik分詞器時,請注意分詞器放在\elasticsearch-2.4.1\plugins\ik,(ik目錄手動新建)。但這裏更加要注意的是,請不要將elasticSearch安裝在D盤的Program Files中,Program Files中的文件都是隻讀的,啓動時會報以下錯誤

Exception in thread "main" java.security.AccessControlException: access denied ("java.io.FilePermission" "D:\Program%20Files\elasticsearch-2.4.1\plugins\ik\config\IKAnalyzer.cfg.xml" "read")

在elasticSearch.yml文件中加入以下配置屬性,記得最前面要加一個空格,不然會報錯

index.analysis.analyzer.ik.type: "ik"

 

Ik分詞器

http://192.168.8.122:9200/_analyze?analyzer=ik_max_word&pretty=true

{"text":"中華人民共和國國歌"}

analyzer參數是使用了ik分詞器的,沒有analyzer參數即是es自帶分詞器,對中文效果很差

在項目中使用分詞器,加入依賴

    <!-- ik分詞器 -->
    <dependency>
        <groupId>com.janeluo</groupId>
        <artifactId>ikanalyzer</artifactId>
        <version>2012_u6</version>
    </dependency>

下面使用例子測試分詞器的能力(方法不要參數的話就直接用text字符串進行測試,useSmart參數true,false也會影響分詞的效果)

    /**
	 * 使用ik分詞器
	 * @param searchStr 搜索詞
	 * @param useSmart 是否智能分詞      非智能分詞:細粒度輸出所有可能的切分結果,智能分詞: 合併數詞和量詞,對分詞結果進行歧義判斷
	 * @return
	 */
	@RequestMapping(value="/ikSearch")
	public String filter(String searchStr,Boolean useSmart){
        //String text="宋祖英語培訓班、周渝民政服務中心、容祖兒童醫院、吳奇隆胸醫院、蘇永康復中心、梁朝偉哥專賣、陳冠希望小學、吳彥祖傳中醫坊、林書豪華酒店";  
		
		//獨立Lucene實現
		StringReader re = new StringReader(searchStr);
		//參數一input 
		//參數二-useSmart - 爲true,使用智能分詞策略   
		IKSegmenter ik = new IKSegmenter(re,useSmart);
		Lexeme lex = null;
		
		String ikstr="";
		try {
		    while((lex=ik.next())!=null){
		    	ikstr += lex.getLexemeText()+"|";
		    	System.out.print(lex.getLexemeText()+"|");
		    }
		}catch (Exception e) {
			e.printStackTrace();
		}
		
		return ikstr;
	}

 

 

去停止詞

而在開發中發現使用了分詞器之後,分詞的效果會夾帶一些去停止詞(的、麼、了、嗎等)。所以,項目中還需要引入去停止詞,在已經下載好的ik分詞器中可以找到

stopword.dic(默認英文去停止詞,去停止詞可以添加)

custom裏面的ext_stopword.dic(拓展去停止詞,大部分都是用於中文的拓展,去停止詞可以添加)

還有一個Ik的配置文件IKAnalyzer.cfg.xml,若要自定義新的去停止詞

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 擴展配置</comment>
	<!--用戶可以在這裏配置自己的擴展字典 -->
	<entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
	 <!--用戶可以在這裏配置自己的擴展停止詞字典-->
	<entry key="ext_stopwords">custom/ext_stopword.dic</entry>
	<!--用戶可以在這裏配置遠程擴展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用戶可以在這裏配置遠程擴展停止詞字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

所以java項目中一般把IKAnalyzer.cfg.xml文件和擴展詞典文件放到src目錄下即可生效,但在maven項目中需放在src/mian/java目錄下才可生效。

https://blog.csdn.net/qq_40131121/article/details/80591177

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章