基礎:ES支持兩種同義方式。一種是單向同義詞,一種是雙向同義詞。
臀部,臀,屁股
斑=>斑,雀斑
i-pod,i pod,i pad =>ipod
說明:對於臀部,臀,屁股。我們可以理解成相互完全等價。對於“斑”“雀斑”,如果文章分詞後包含“斑”,會自動存入“斑”“雀斑”兩個字詞,這樣搜索斑或者雀斑都會命中該文章。如果使用"i-pod","i pod","i pad"轉爲"ipod”,那就會出現一個問題就是在因爲存儲的是"ipod”,所以搜"i pad"就不會命中該文章了。不推薦使用這種方式。
需求:今天有一個需求,我們認爲“超聲提升”和“超聲刀”是一種東西,想實現搜“超聲提升”同時出現“超聲提升”和“超聲刀”的文章。
實踐:
第一步、我們先在同義詞配置了"超聲提升,超聲刀",這時候搜索的“超聲提升”,發現無法召回超聲刀的文章。這是因爲雖然配置了同義詞,因爲舊的ES索引在建立的時候並不知道這對同義詞,所以需要重跑索引。
第二步、我們重跑了文章的索引,這時候搜索的“超聲提升”,仍然無法召回“超聲刀”的文章。這是因爲搜索“超聲提升”,search_analyzer會把他分詞成“超聲”和“提升”,而索引中存的是“超聲提升”,無法命中。所以需要搜索分詞。
第三步、我們分析了“超聲提升”,這個詞沒有比較分詞。於是我們把“超聲提升”加入分詞dict。這樣搜索“超聲提升”就會按照“超聲提升”去搜索。完美解決。