前面提要
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目錄下才可生效。