一個案例弄懂ElasticSearch分詞匹配原理和同義詞

基礎:ES支持兩種同義方式。一種是單向同義詞,一種是雙向同義詞。

臀部,臀,屁股
斑=>斑,雀斑   
i-pod,i pod,i pad =>ipod

說明:對於臀部,臀,屁股。我們可以理解成相互完全等價。對於“斑”“雀斑”,如果文章分詞後包含“斑”,會自動存入“斑”“雀斑”兩個字詞,這樣搜索斑或者雀斑都會命中該文章。如果使用"i-pod","i pod","i pad"轉爲"ipod”,那就會出現一個問題就是在因爲存儲的是"ipod”,所以搜"i pad"就不會命中該文章了。不推薦使用這種方式。

 

需求:今天有一個需求,我們認爲“超聲提升”和“超聲刀”是一種東西,想實現搜“超聲提升”同時出現“超聲提升”和“超聲刀”的文章。

實踐:

第一步、我們先在同義詞配置了"超聲提升,超聲刀",這時候搜索的“超聲提升”,發現無法召回超聲刀的文章。這是因爲雖然配置了同義詞,因爲舊的ES索引在建立的時候並不知道這對同義詞,所以需要重跑索引。

第二步、我們重跑了文章的索引,這時候搜索的“超聲提升”,仍然無法召回“超聲刀”的文章。這是因爲搜索“超聲提升”,search_analyzer會把他分詞成“超聲”和“提升”,而索引中存的是“超聲提升”,無法命中。所以需要搜索分詞。

第三步、我們分析了“超聲提升”,這個詞沒有比較分詞。於是我們把“超聲提升”加入分詞dict。這樣搜索“超聲提升”就會按照“超聲提升”去搜索。完美解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章