和我一起打造個簡單搜索之IK分詞以及拼音分詞
elasticsearch 官方默認的分詞插件,對中文分詞效果不理想,它是把中文詞語分成了一個一個的漢字。所以我們引入 es 插件 es-ik。同時為了提升用戶體驗,引入 es-pinyin 插件。本文介紹這兩個 es 插件的安裝。
環境
本文以及後續 es 系列文章都基於 5.5.3 這個版本的 elasticsearch ,這個版本比較穩定,可以用於生產環境。
ik 分詞器 和 pinyin 分詞器在 github 倉庫可以找到,註意版本與 elasticsearch 的版本需要對應,本文使用 5.5.3 版本
- ik 分詞器下載
- pinyin 分詞器下載
如果 elasticsearch 與我的版本不同,可以去官方 github 對應的倉庫查看對應版本的 ik 以及 pinyin 分詞器。
系列文章
- 一、和我一起打造個簡單搜索之ElasticSearch集群搭建
- 二、和我一起打造個簡單搜索之ElasticSearch入門
- 三、和我一起打造個簡單搜索之IK分詞以及拼音分詞
- 四、和我一起打造個簡單搜索之Logstash實時同步建立索引
- 五、和我一起打造個簡單搜索之SpringDataElasticSearch入門
- 六、和我一起打造個簡單搜索之SpringDataElasticSearch關鍵詞高亮
- ...
安裝 ik 分詞器
前文中,我們已經安裝了 elasticsearch,我們在其基礎上安裝分詞器
cd /usr/local/es/ ## 下載 ik 分詞器 wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.3/elasticsearch-analysis-ik-5.5.3.zip ## 使用 unzip 解壓 ## 如果未安裝,通過 yum instal unzip 進行安裝 unzip elasticsearch-analysis-ik-5.5.3.zip ## 在 elasticsearch 安裝目錄下的 plugins 文件夾下創建 ik 目錄 mkdir /usr/local/es/master/plugins/ik ## 將解壓後的 ik 目錄下的所有文件移動到 /usr/local/es/master/plugins/ik/ mv /usr/local/es/elasticsearch/* /usr/local/es/master/plugins/ik/ ## 重啟 elasticsearch 或啟動 master elasticsearch ## 註意啟動時,需要切換到 esuser 用戶 ## 啟動成功後,日誌裏會打印此行 [2018-09-02T06:33:43,703][INFO ][o.e.p.PluginsService ] [master] loaded plugin [analysis-ik]
驗證 ik 分詞器是否生效
打開 Restlet Client 或者 postman 工具
GET http://192.168.199.192:9200/_analyze?analyzer=ik_smart&text="中華人民共和國國歌"
移除名為 ik 的analyzer和tokenizer,請分別使用 ik_smart 和 ik_max_word
ik_max_word: 會將文本做最細粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,中華人民,中華,華人,人民共和國,人民,人,民,共和國,共和,和,國國,國歌”,會窮盡各種可能的組合;
ik_smart: 會做最粗粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,國歌”。
這裏 analyzer 可以指定分詞類型,發送請求返回結果:
{
"tokens": [
{
"token": "中華人民共和國",
"start_offset": 1,
"end_offset": 8,
"type": "CN_WORD",
"position": 0
},
{
"token": "國歌",
"start_offset": 8,
"end_offset": 10,
"type": "CN_WORD",
"position": 1
}
]
}
我這裏指定的 analyzer 為 ik_smart,即粗粒度分詞,可以看到 ik 分詞器已經生效了。接下來繼續安裝 pinyin 分詞器。
安裝 pinyin 分詞器
cd /usr/local/es/
## 下載 pinyin 分詞器
wget https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v5.5.3/elasticsearch-analysis-pinyin-5.5.3.zip
## 使用 unzip 解壓
## 如果未安裝,通過 yum instal unzip 進行安裝
unzip elasticsearch-analysis-pinyin-5.5.3.zip
## 在 elasticsearch 安裝目錄下的 plugins 文件夾下創建 pinyin 目錄
mkdir /usr/local/es/master/plugins/pinyin
## 將解壓後的 ik 目錄下的所有文件移動到 /usr/local/es/master/plugins/pinyin/
mv /usr/local/es/elasticsearch/* /usr/local/es/master/plugins/pinyin/
## 重啟 elasticsearch 或啟動 master elasticsearch
## 註意啟動時,需要切換到 esuser 用戶
## 啟動成功後,日誌裏打印
[2018-09-02T07:04:56,203][INFO ][o.e.p.PluginsService ] [master] loaded plugin [analysis-ik]
[2018-09-02T07:04:56,203][INFO ][o.e.p.PluginsService ] [master] loaded plugin [analysis-pinyin]
驗證 pinyin 分詞器是否生效
打開 Restlet Client 或者 postman 工具
GET http://192.168.199.192:9200/_analyze?analyzer=pinyin&text="李小龍"
這裏 analyzer 可以指定分詞為 pinyin,發送請求返回結果:
{
"tokens": [
{
"token": "li",
"start_offset": 1,
"end_offset": 2,
"type": "word",
"position": 0
},
{
"token": "xiao",
"start_offset": 2,
"end_offset": 3,
"type": "word",
"position": 1
},
{
"token": "long",
"start_offset": 3,
"end_offset": 4,
"type": "word",
"position": 2
},
{
"token": "lxl",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 2
}
]
}
觀察結果,說明 pinyin 分詞器也已經生效了。
集群其他節點分詞器安裝
現在只對 master 進行了安裝,其他 slave 也需要安裝,這裏可以通過拷貝的方式直接來完成安裝了。
cp -r master/plugins/ slave1/
cp -r master/plugins/ slave2/
如果其他節點在不同服務器上,通過 scp 命令拷貝即可。
有疑問?
歡迎來信,給我寫信
參考
- https://github.com/medcl/elasticsearch-analysis-pinyin/issues/19
和我一起打造個簡單搜索之IK分詞以及拼音分詞