中文的搜尋和英文的搜尋最大不同之處在於分詞,英文分詞可以通過空格,而中文的分詞則複雜很多,分詞會直接影響使用者的搜尋使用體驗,在一些大公司甚至會使用機器學習的方式進行分詞。在這篇文章中筆者主要講解es中文分詞相關的優化。
網路上經常會出現一些新詞,比如「藍瘦香菇」,藍瘦香菇預設情況下會被分詞,分詞結果如下所示
藍,瘦,香菇
這樣的分詞會導致搜尋出很多不相關的結果,在這種情況下,我們使用擴充套件詞庫,以ik分詞器為例,我們可以在/config/analysis-ik下建立乙個my.dic。將」藍瘦香菇」新增其中,修改ikanalyzer.cfg.xml,修改ikanalyzer.cfg.xml配置檔案如下所示
重啟es,重試ik_smart分詞器,分詞如下所示
藍瘦香菇
分詞器會直接影響分詞效果。比如分別使用ik_max_word和ik_smart分別對」上海市」這個詞進行分詞,分詞效果分別如下所示
ik_max_word
上海市,上海,海市
ik_smart
上海市
使用ik_max_word對短語」 美麗的世界」進行分詞,分詞結果如下
美麗,的,世界
stopword.dic
extra_stopword.dic
其中stopword.dic包含了英文的停頓詞比如the,and,if。而中文的停頓詞放在了extra_stopword.dic當中,新增的停頓詞都放在extra_stopword.dic中,extra_stopword.dic預設不生效,如果我們想讓extra_stopword.dic生效,我們可以配置ikanalyzer.cfg.xml中ext_stopwords專案,使得extra_stopword.dic生效
配置完成之後,再對短語」美麗的世界『』進行優化,分詞結果如下所示,這個時候就不會有停頓詞了
美麗,世界
如下有一篇文件
首先建立同義詞詞典synonyms.txt檔案,內容如下所示
b站,嗶哩嗶哩,彈幕網, bilibili => b站,嗶哩嗶哩,彈幕網, bilibili
自定義分析器,這個分析器是具有同義詞作用的ik分詞器
}}synonyms_path指的是同義詞詞典所在的路徑
}} 測試分析器
筆者預期分析器會給出如下分詞結果
b站,嗶哩嗶哩,彈幕網, bilibili
但是實際得到的分詞結果如下
b,站
如何處理呢,就是將b站,嗶哩嗶哩,彈幕網關鍵字加入到擴充套件詞典中,就能避免被分詞了。新增之後再次進行測試,測試結果就為預期所示了
b站,嗶哩嗶哩,彈幕網, bilibili
拼音分詞屬性
屬性 說明keep first letter 啟用此選項時,例如 劉德華 ldh,預設值 true keep separate first letter 啟用該選項時,將保留第乙個字母分開,例如 劉德華 l,d,h,預設 假的,注意 查詢結果也許是太模糊,由於長期過頻 limit first let...
Es修改分詞相關操作
最近修改了elasticsearch分詞。並reindex索引。使用的分詞外掛程式是hanlp 修改完分詞之後將對應的bin檔案上傳到服務,並替換對應的bin檔案 伺服器es對應的路徑elasticsearch plugins analysis hanlp data dictionary 替換完成之...
各種基於es的分詞外掛程式
field.store.yes 儲存字段值 未分詞前的字段值 field.store.no 不儲存,儲存與索引沒有關係 field.store.compress 壓縮儲存,用於長文字或二進位制,但效能受損 jieba分詞 結巴分詞作為es的外掛程式 按照這個 說的,即可安裝。ansj分詞外掛程式 j...