接下來從以下幾點講壹下怎麽ES中文分詞
索引時,為了提供索引的覆蓋範圍,通常會采用ik_max_word分析器,會以最細粒度分詞索引,搜索時為了提高搜索準確度,會采用ik_smart分析器,會以粗粒度分詞
字段mapping設置如下:
analysis索引分析模塊充當analyzer分析器的可配置註冊表,通過analyzer對文檔索引階段的字段和搜索String進行處理,自定義analyzer時,通常需要character filter tokenizer token filters來完成
首先字符串經過過濾器(character filter),他們的工作是在分詞前處理字符串。字符過濾器能夠去除HTML標記,例如把“<a>”變成“a
英文分詞可以根據空格將單詞分開,中文分詞比較復雜,可以采用機器學習算法來分詞
最後,每個詞都通過所有表征過濾(token filters),他可以修改詞(例如將“Quick”轉為小寫),去掉詞(例如停用詞像“a”、“and”、“the”等等),或者增加詞(例如同義詞像“a”、“and”、“the”等等)或者增加詞(例如同義詞像“jump”和“leap”)。
character filter-->>tokenizer-->>token filters
官網example:
通常為了保證索引時覆蓋度和搜索時準確度,索引分詞器采用ik_max_word,搜索分析器采用ik_smart模式
因為倒排索引中的數據是索引時由分詞器來處理的,如果分詞器有變化,那麽搜索時query關鍵詞即使和doc中關鍵詞相同,但是因為分詞器的原因,分出來的詞會出現不匹配的情況,因此當mapping或者分詞器字典同義詞詞典等發生變化時,需要reindex索引數據
2.1 建議同義詞詞典
自定義添加同義詞通過ik分詞器
想查看同義詞效果或者測試分詞效果
suggest詞需要對拼音前綴,全拼,中文進行前綴匹配,例如:“百度”壹詞,鍵入"baidu","bd","百"都必須匹配到,因此在索引的時候需要壹詞分多個分詞器來索引保存,中文采用單字分詞,拼音首字母和全拼需要自定義analyzer來索引。
部分內容有待完善