當前位置:成語大全網 - 英語詞典 - Elasticsearch搜索中文分詞優化

Elasticsearch搜索中文分詞優化

Elasticsearch 中文搜索時遇到幾個問題:

接下來從以下幾點講壹下怎麽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來索引。

部分內容有待完善