IK分詞外掛程式(英文名為analysis-ik)是Elasticsearch的擴充外掛程式,預設不能卸載。該外掛程式在開源外掛程式的基礎上,擴充支援了Object Storage Service服務OSS(Object Storage Service)詞典檔案的動態載入,可以實現IK詞典的冷更新和熱更新。本文介紹如何使用IK分詞外掛程式。
前提條件
確保叢集狀態為正常。可在基本資料頁面查看,具體操作請參見查看執行個體的基本資料。
使用限制
Elasticsearch 7.16及以上版本的執行個體和部分地區的雲端式原生管控的執行個體不支援IK詞典冷更新。
注意事項
對於已經配置了IK分詞的索引,在IK詞典冷更新或熱更新操作完成後將只對新資料(包含新增資料和更新後的資料)生效。如果您希望對全部資料生效,需要重建索引。
詞典冷熱更新對比
Elasticsearch的IK分詞外掛程式支援IK詞典冷更新和IK詞典熱更新,兩者區別如下。
更新方式 | 生效方式 | 載入方式 | 說明 |
冷更新 | 對整個叢集的詞典進行更新操作,需要重啟叢集才會生效。 | 系統自動將上傳的詞典檔案傳送到Elasticsearch節點上,並修改IKAnalyzer.cfg.xml檔案,然後重啟Elasticsearch節點載入詞典檔案。 | IK詞典冷更新支援修改IK內建的主詞庫和停用詞主詞庫。在IK詞典冷更新頁面可以看到系統內建的主詞典為SYSTEM_MAIN.dic,系統內建的停用詞主詞典為SYSTEM_STOPWORD.dic。 重要 如果您需要自訂配置詞庫檔案(IKAnalyzer.cfg.xml),可下載詞典並修改後重新上傳,具體操作請參見更新詞庫檔案。 |
熱更新 | 第一次上傳詞典檔案時,會對整個叢集的詞典進行更新,需要重啟叢集才會生效;二次上傳同名檔案不會觸發叢集重啟,在運行過程中直接載入詞庫。 | 當詞典檔案內容發生變化時,上傳詞典檔案後Elasticsearch節點能自動載入詞典檔案,實現詞典的更新操作。 如果詞典檔案清單發生變化,例如上傳新詞典檔案或刪除詞典檔案,那麼整個叢集都需要重新載入詞典的配置(因為會涉及到修改IKAnalyzer.cfg.xml檔案)。 | 第一次上傳詞典檔案時,系統會自動修改IKAnalyzer.cfg.xml檔案,所以在更新詞典後,需要重啟叢集才會生效。 |
詞典檔案說明
詞典類型 | 詞典說明 | 相關限制 | 更新方式 |
主分詞詞典 | 在Elasticsearch叢集中建立索引時,如果指定了主分詞詞典,那麼向叢集中寫入資料時,如果資料中包含主分詞詞典中的詞,叢集就會建立索引,並且該索引能通過關鍵詞被查詢到。 |
| |
停用詞詞典 | 在Elasticsearch叢集中建立索引時,如果指定了停用詞詞典,那麼向叢集中寫入資料時,資料中包含的停用詞詞典中的詞會被過濾掉。 Elasticsearch預設的停用詞詞庫設定檔中,包含了一些預設的停用詞,例如:a、an、and、are、as、at、be、but、by、for、if、in、into、is、it、no、not、of、on、or、such、that、the、their、then、there、these、they、this、to、was、will、with。如果您需要去掉一些不需要的預設停用詞,可參見更新詞庫檔案,下載並修改內容,然後將檔案重新命名為SYSTEM_STOPWORD.dic後重新上傳。 說明 如果您需要使用中文停用詞,可參考官方Elasticsearch預設的IK分詞設定檔中config目錄下的extra_stopword.dic檔案。該檔案中包含的停用詞包括:也、了、仍、從、以、使、則、卻、又、及、對、就、並、很、或、把、是、的、著、給、而、被、讓、在、還、比、等、當、與、於、但。 |
IK詞典冷更新
- 登入Elasticsearch控制台。
- 在左側導覽列,單擊Elasticsearch執行個體。
- 進入目標執行個體。
- 在頂部功能表列處,選擇資源群組和地區。
- 在Elasticsearch執行個體中單擊目標執行個體ID。
在左側導覽列,選擇 。
在系統預設外掛程式列表中,找到analysis-ik外掛程式,單擊其右側操作列下的冷更新。
在冷更新頁面,單擊下方的配置。
在IK主分詞詞庫下方,選擇詞典的更新方式,並按照以下說明上傳詞典檔案。
Elasticsearch支援上傳DIC檔案和添加OSS檔案兩種詞典更新方式:
上傳DIC檔案:單擊上傳DIC檔案,選擇一個本地檔案進行上傳。
添加OSS檔案:輸入Bucket名稱和檔案名稱,單擊添加。
請確保Bucket與當前Elasticsearch執行個體在同一地區下,且檔案為DIC檔案。當源端(OSS)的檔案內容發生變化後,需要重新手動設定上傳才會生效,不支援自動同步更新。
警告以下操作會重啟執行個體,為保證您的業務不受影響,請確認後在業務低峰期進行操作。
滑動到頁面底端,勾選該操作會重啟執行個體,請確認後操作,單擊儲存。
無論是詞典檔案變化,還是詞典內容發生變化,冷更新操作都會觸發叢集重啟。
重啟成功後,登入對應Elasticsearch執行個體的Kibana控制台,執行以下命令測試詞典是否生效。
登入控制台的具體操作步驟,請參見登入Kibana控制台。
GET _analyze { "analyzer": "ik_smart", "text": ["您詞典中包含的詞"] }
正常情況下,系統會根據ik_smart的分詞規則對text的值進行分詞並返回。
說明IK分詞外掛程式的分詞器包括ik_smart和ik_max_word,兩者區別如下:
ik_max_word:將文本按照最細粒度進行拆分,適合術語查詢。
ik_smart:將文本按照粗粒度進行拆分,適合短語查詢。
IK詞典熱更新
在系統預設外掛程式列表中,找到需要更新的IK外掛程式,單擊其右側操作列下的熱更新。
在熱更新頁面,單擊右下方的配置。
在IK主分詞詞庫下方,選擇詞典的更新方式,並按照以下說明上傳詞典檔案。
說明IK熱更新不支援修改系統內建的主詞典,如果您需要修改系統主詞典請使用IK冷更新的方式。
Elasticsearch支援上傳DIC檔案和添加OSS檔案兩種詞典更新方式:
上傳DIC檔案:單擊上傳DIC檔案,選擇一個本地檔案進行上傳。
添加OSS檔案:輸入Bucket名稱和檔案名稱,單擊添加。
請確保Bucket與當前Elasticsearch執行個體在同一地區下,且檔案為DIC檔案(以下步驟以dic_0.dic檔案進行說明)。且源端(OSS)的檔案內容發生變化後,需要重新手動設定上傳才會生效,不支援自動同步更新。
警告以下操作會重啟執行個體,為保證您的業務不受影響,請確認後在業務低峰期進行操作。
滑動到頁面底端,勾選該操作會重啟執行個體,請確認後操作(第一次上傳詞典檔案,需要重啟),單擊儲存。
儲存後,叢集會進行滾動重啟,等待滾動重啟結束後,詞典會自動生效。
詞典使用一段時間後,如果需要擴充或者減少詞典中的內容,請繼續執行以下步驟修改上傳的dic_0.dic檔案。
進入詞典熱更新頁面,先刪除之前上傳的同名詞典檔案,重新上傳修改過的dic_0.dic同名詞典檔案。
因為修改的是已存在的同名詞典檔案的內容,所以本次上傳修改過的同名詞典檔案不需要滾動重啟整個叢集。
單擊儲存。
由於Elasticsearch節點上的外掛程式具有自動載入詞典檔案的功能,所以每個節點擷取詞典檔案的可能時間不同,請耐心等待詞典生效。大概兩分鐘後再使用更新之後的詞典,為了保證準確性,請登入Kibana控制台,多次執行以下命令進行驗證。
說明登入Kibana控制台的具體步驟,請參見登入Kibana控制台。
GET _analyze { "analyzer": "ik_smart", "text": ["您詞典中包含的詞"] }
正常情況下,系統會根據ik_smart的分詞規則對text的值進行分詞並返回。
更新詞庫檔案
如果您需要更新已經上傳的詞庫檔案,可直接下載對應檔案,修改後重新上傳。以SYSTEM_STOPWORD.dic為例,更新詞庫檔案的步驟如下:
在系統預設外掛程式列表中,找到analysis-ik外掛程式,單擊其右側操作列下的冷更新。
在冷更新面板中,單擊IK停用詞庫下SYSTEM_STOPWORD.dic檔案對應的表徵圖。
重要進行IK詞典冷更新時,系統不支援刪除內建的主詞典和停用詞主詞典,但可以修改。 修改方式如下:
如果需要修改系統內建的主詞典檔案,請上傳以SYSTEM_MAIN.dic命名的主詞典,系統會自動覆蓋原始內容。詳細資料,請參見IK Analysis for Elasticsearch。
如果需要修改系統內建的停用詞主詞典檔案,請上傳以SYSTEM_STOPWORD.dic命名的停用詞主詞典,系統會自動覆蓋原始內容。詳細資料,請參見IK Analysis for Elasticsearch。
修改已下載的檔案,並重新上傳。
相關文檔
IK詞典熱更新的API文檔:UpdateHotIkDicts
IK詞典冷更新的API文檔:UpdateDict