
分詞器的執(zhí)行流程Character Filter字符過濾器 → Tokenizer切詞器 → Token Filter詞條過濾器字符過濾器Character Filter操作對(duì)象原始完整字符串還沒切詞工作字符層面替換、刪除、清洗。例子去掉 HTML 標(biāo)簽、全角轉(zhuǎn)半角、正則替換。切詞器Tokenizer操作對(duì)象經(jīng)過字符過濾器處理后的字符串工作把連續(xù)字符串切割成一個(gè)個(gè)獨(dú)立的token同時(shí)生成term詞條文本position詞位置match_phrase 依賴start_offset /end_offset字符起止偏移例如 standard tokenizer 按單詞邊界切分。詞條過濾器Token Filter操作對(duì)象已經(jīng)切好的單個(gè) token工作對(duì)每個(gè) token 里面的 term 做修改、刪除、新增不會(huì)改變 token 的 position 和 offset。常見操作小寫轉(zhuǎn)換、去停用詞、同義詞、詞干提取。文本正?;裻oken做標(biāo)準(zhǔn)化處理消除無關(guān)差異讓語義相同、寫法不同的文本分詞后得到一樣的 term。常見的正?;僮鱯tandard 分詞器自帶大小寫轉(zhuǎn)換全部轉(zhuǎn)為小寫Xiaomi→xiaomi這樣match搜Xiaomi和xiaomi能命中同一文檔。去掉變音符號(hào)重音café→cafe法語、西班牙語的重音符號(hào)剝離。刪除停用詞可選stop token filter英文the、a、is這類無實(shí)義虛詞直接移除減少索引體積。同義詞替換synonym filter手機(jī)、移動(dòng)電話→ 統(tǒng)一映射成同一個(gè) term。去除多余符號(hào)、特殊字符、空白自定義分詞器在settings里面定義analyzer由三部分組成char_filter可選 tokenizer必須只能 1 個(gè) filter可選token filter# 自定義分詞器支持字符映射和同義詞過濾PUTmy_index{settings:{analysis:{char_filter:{my_mapping:{type:mapping,mappings:[$ yuan, youjian]}},filter:{my_synonym:{type:synonym,synonyms:[xiaomi,pianyi,phone,dianhua]}},analyzer:{my_analyzer:{type:custom,char_filter:[my_mapping],tokenizer:standard,filter:[lowercase,my_synonym]}}}}}# 測試GET/my_index/_analyze{text:[xiaomi shouji $,phone],analyzer:my_analyzer}其中字符通過映射轉(zhuǎn)化$ yuanphone新增了近義詞dianhua。分詞器插件中文使用默認(rèn)的standard分詞器文本將被拆分成單個(gè)字符中文一般使用ik分詞器。ik分詞器插件安裝插件版本需和es版本對(duì)應(yīng)下載地址https://release.infinilabs.com/analysis-ik/stable/得到對(duì)應(yīng)版本的下載地址后在容器內(nèi)執(zhí)行./bin/elasticsearch-plugin install https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.15.0.zip安裝后重啟es測試添加擴(kuò)展詞典若有自定義的詞組或停頓詞未被正常識(shí)別可添加自定義的拓展詞典然后再ik插件目錄的文件中進(jìn)行配置。1、新增自定義詞典my_ext.dic小米手機(jī) 鴻蒙系統(tǒng) 豆包大模型2、將文件放入到配置目錄目錄地址/usr/share/elasticsearch/config/analysis-ik3、配置文件中指定自定義的詞典4、重啟es驗(yàn)證同樣的方法也可以配置指定義停頓詞在停頓詞文件中的詞條分詞時(shí)會(huì)被去掉。配置遠(yuǎn)程詞庫本地?cái)U(kuò)展詞庫每次修改需要重啟es服務(wù)才能生效es支持配置遠(yuǎn)程詞庫通過接口請(qǐng)求的方式熱更新擴(kuò)展詞庫。核心IK 內(nèi)置Monitor 定時(shí)線程每隔1 分鐘向遠(yuǎn)程 URL 發(fā)起HEAD請(qǐng)求校驗(yàn)Last-Modified/ETag任意一個(gè)發(fā)生變化則GET拉取詞庫內(nèi)存重載詞典不需要重啟 ES??梢酝ㄟ^搭建服務(wù)或使用nginx返回對(duì)應(yīng)擴(kuò)展文件。1、使用nginx返回詞典數(shù)據(jù)nginx配置靜態(tài)服務(wù)# 服務(wù)1IK遠(yuǎn)程詞典8002端口 server{listen8002;# 指定靜態(tài)資源目錄 root/usr/share/nginx/html;# 本server下所有返回文本默認(rèn)標(biāo)記utf-8charset utf-8;# 關(guān)鍵讓txt文件也帶上charset默認(rèn)charset只對(duì)html生效 charset_types text/plain;location/ikdict/{# 設(shè)置文件不緩存 add_headerCache-Controlno-cache;}}2、在資源目錄下添加remote_dict.txt和remote_stop.txtremote_dict.txt 渣男 渣女remote_stop.txt 分割3、配置文件中配置遠(yuǎn)程地址保存后重啟一次es后續(xù)只要遠(yuǎn)程文件有改動(dòng)詞庫會(huì)自動(dòng)更新。4、驗(yàn)證添加遠(yuǎn)程詞庫前詞庫生效前‘渣男’、‘渣女’被單獨(dú)拆分‘分割’也被識(shí)別為了詞條。當(dāng)檢測到遠(yuǎn)程文件變動(dòng)時(shí)es會(huì)重新加載文件控制臺(tái)有日志打印生效后