和我一起打造個簡單搜尋之IK分詞以及拼音分詞
elasticsearch 官方預設的分詞外掛,對中文分詞效果不理想,它是把中文詞語分成了一個一個的漢字。所以我們引入 es 外掛 es-ik。同時為了提升使用者體驗,引入 es-pinyin 外掛。本文介紹這兩個 es 外掛的安裝。
環境
本文以及後續 es 系列文章都基於 5.5.3 這個版本的 elasticsearch ,這個版本比較穩定,可以用於生產環境。
ik 分詞器 和 pinyin 分詞器在 github 倉庫可以找到,注意版本與 elasticsearch 的版本需要對應,本文使用 5.5.3 版本
如果 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 命令拷貝即可。
有疑問?
歡迎來信,給我寫信