IK分词器详解
IK分詞器插件
什么是 IK 分詞器
分詞:即把一段中文或者別的劃分成一個個的關鍵字,我們在搜索時候會把自己的信息進行分詞,會把數據庫中或者索引庫中的數據進行分詞,然后進行一個匹配操作,默認的中文分詞器是將每個字看成一個詞,比如"我愛技術"會被分為"我",“愛”,“技”,“術”,這顯然不符合要求,所以我們需要安裝中文分詞器IK來解決這個問題
IK提供了兩個分詞算法:ik_smart和ik_max_word
其中ik_smart為最少切分,ik_max_word為最細粒度劃分
下載安裝
同樣下載不說直接安裝.記得版本相同
解壓縮后拷貝到ElasticSearch的plugins文件夾下
ik 目錄
重啟ES
之前是沒有插件加載的
可以清晰的看到加載了 analysis-ik
也可以通過ES自帶的工具查看 命令行執行 ElasticSearch-plugin list
進入Kibana測試
先測試 ik_smart
最少劃分
GET _analyze {"analyzer": "ik_smart", "text": "天津理工大學" }返回結果
{"tokens" : [{"token" : "天津","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "理工大學","start_offset" : 2,"end_offset" : 6,"type" : "CN_WORD","position" : 1}] }最細粒度劃分
GET _analyze {"analyzer": "ik_max_word", "text": "天津理工大學" }返回結果
{"tokens" : [{"token" : "天津","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "理工大學","start_offset" : 2,"end_offset" : 6,"type" : "CN_WORD","position" : 1},{"token" : "理工大","start_offset" : 2,"end_offset" : 5,"type" : "CN_WORD","position" : 2},{"token" : "理工","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 3},{"token" : "工大","start_offset" : 3,"end_offset" : 5,"type" : "CN_WORD","position" : 4},{"token" : "大學","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 5}] }若發現結果沒有區別, 而且他不認為 查詢的詞 比如 鑫澤 是一個詞, 這就是一個問題,則么辦呢?
這種自己需要的詞,需要自己加到字典中
IK分詞器增加自己的配置
我們找到IK的配置文件, 位于ik/config/IKAnalyzer.cfg.xml
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"></entry><!--用戶可以在這里配置自己的擴展停止詞字典--><entry key="ext_stopwords"></entry><!--用戶可以在這里配置遠程擴展字典 --><!-- <entry key="remote_ext_dict">words_location</entry> --><!--用戶可以在這里配置遠程擴展停止詞字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>修改后的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">xinze.dic</entry><!--用戶可以在這里配置自己的擴展停止詞字典--><entry key="ext_stopwords"></entry><!--用戶可以在這里配置遠程擴展字典 --><!-- <entry key="remote_ext_dict">words_location</entry> --><!--用戶可以在這里配置遠程擴展停止詞字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>xinze.dic
鑫澤測試
GET _analyze {"analyzer": "ik_smart", "text": "超級喜歡鑫澤" }結果
{"tokens" : [{"token" : "超級","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "喜歡","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 1},{"token" : "鑫澤","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 2}] }文章已上傳gitee https://gitee.com/codingce/hexo-blog
項目地址: https://github.com/xzMhehe/codingce-java
總結