Elasticsearch也須要安裝IK分析器以實現對中文更好的分詞支持。git
去Github下載最新版elasticsearch-ikgithub
https://github.com/medcl/elasticsearch-analysis-ik/releaseselasticsearch
將ik文件夾放在elasticsearch/plugins目錄下,重啓elasticsearch。post
Console控制檯輸出:測試
[2019-09-04T08:50:23,395][INFO ][o.e.p.PluginsService ] [THINKPAD-T460P] loaded plugin [analysis-ik]spa
IK分詞器有兩種分詞模式:ik_max_word和ik_smart模式。3d
一、ik_max_wordcode
會將文本作最細粒度的拆分,好比會將「中華人民共和國人民大會堂」拆分爲「中華人民共和國、中華人民、中華、華人、人民共和國、人民、共和國、大會堂、大會、會堂等詞語。xml
二、ik_smartblog
會作最粗粒度的拆分,好比會將「中華人民共和國人民大會堂」拆分爲中華人民共和國、人民大會堂。
測試兩種分詞模式的效果。分詞查詢要用GET、POST請求,須要把請求參數寫在body中,且須要JSON格式。
發送:post localhost:9200/_analyze
(1)測試ik_max_word
POST _analyze { "analyzer": "ik_max_word", "text":"中華人民共和國人民大會堂" }
(2)測試ik_smart
POST _analyze { "analyzer":"ik_smart", "text": "中華人民共和國人民大會堂" }
網上關於兩種分詞器使用的最佳實踐是:索引時用ik_max_word,在搜索時用ik_smart。
即:索引時最大化的將文章內容分詞,搜索時更精確的搜索到想要的結果。
不過,須要注意的是:ik_smart 分詞結果並非 ik_max_word的子集。這樣,在使用ik_max_word 建索引,用ik_smart 搜索時,有可能結果匹配不上,因此這是兩種不一樣類型的分詞結果,建議仍是不要混用。
下面測試【5號電池】,在兩種分詞模式下的輸出結果。
在elasticsearch/plugins/ik/config下新建my.dic文件,在my.dic中寫入想要分詞識別的文字;修改IKAnalyzer.cfg.xml文件,在<entry key="ext_dict">中指定my.dic。
<properties> <comment>IK Analyzer 擴展配置</comment> <!--用戶能夠在這裏配置本身的擴展字典 --> <entry key="ext_dict">my.dic</entry> <!--用戶能夠在這裏配置本身的擴展中止詞字典--> <entry key="ext_stopwords"></entry> <!--用戶能夠在這裏配置遠程擴展字典 --> <!-- <entry key="remote_ext_dict">words_location</entry> --> <!--用戶能夠在這裏配置遠程擴展中止詞字典--> <!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>
重啓elasticsearch便可看到分詞效果。