es的同義詞搜索功能經過自定義分析器實現html
咱們知道 一個 分析器 就是在一個包裏面組合了三種函數的一個包裝器, 三種函數按照順序被執行:app
char_filter 用於分詞前對原搜索的句子進行處理 tokenizer 用於將搜索的句子分紅多個詞組 filter 用於處理tokenizer輸出的詞組,好比刪除某些詞,修改某些詞,增長某些詞函數
實現同義詞搜索的原理是,自定義filter,處理tokenizer輸出的待搜索詞組時,取出其中詞的同義詞,加入到待搜索的詞組中。code
建立分析器:htm
PUT /synonym { "settings": { "analysis": { "filter": { "word_sync": { "type": "synonym", "synonyms_path": "analysis/synonyms.txt" } }, "analyzer": { "ik_sync_smart": { "filter": [ "word_sync" ], "type": "custom", "tokenizer": "ik_smart" } } } } }
上面的例子在名爲synonym的index下面建立了個名爲ik_sync_smart的分析器,改分析器的tokenizer爲ik_smart, filter爲word_sync. word_sync是自定義filter,這個filter的type是synonym,synonyms_path是指定的同義詞詞典的路徑,這個路徑在config下面,因此咱們須要在config路徑下面增長analysis目錄,裏面增長synonyms.txt文件索引
synonyms.txt文件的格式爲每行爲一組同義詞,每組的同義詞格式由以下兩種:token
第一種狀況下,不管索引番茄或者西紅柿,分析器分析結果的詞組爲['番茄', '西紅柿']ip
第二種狀況下,不管索引番茄或者西紅柿,分析器分析結果的詞組爲['西紅柿']原理
能夠經過搜索
GET /synonym/_analyze?analyzer=ik_sync_smart&text=註冊
查看同義詞結果是否符合需求
而後設置索引數據的mapping時,指定對應搜索字段的analyzer爲自定義的ik_sync_smart便可。