本文只是簡單說明一下分詞與搜尋的概念以及實現邏輯,具體細節不討論
分詞在搜尋引擎中是一個重要概念
分詞是搜尋引擎儲存資料和檢索資料的基本單位,這裡有三個重要點
1.儲存:一段文字會被分詞,以分詞為單位存入搜尋引擎
2.檢索:搜尋詞也會被分詞,然後分別與搜尋引擎的資料匹配查詢
3.基本單位:分詞是基本單位
分詞庫就是分詞的集合
中英分詞與搜尋過程
英文
1.在英文文字中,由於單詞之間通常以空格作為自然分隔符,因此空格可以被視為一種基本的“分詞器”,示例
一段文字為"goods moring abc",會被分詞為 "goods" "moring" "abc"三個分詞,
2.當搜尋詞為前面三個詞的任意一個,都會檢索出文字資料
中文
1.在中文文字中,漢字之間沒有空格來明確地界定詞語的邊界,所以只能以中文分詞工具(ik,jieba,hanlp等)來分詞,示例
一段文字為"隔山撬是白首烏",會被分詞為"隔山撬" "隔山" "撬" "白首烏" "白首"五個分詞
2.當搜尋詞為前面五個分詞的任意一個.都會檢索出文字資料
那麼,問題來了,如果我想透過搜尋詞為"g"就把上面英文文字搜尋出來,或者我想透過搜尋詞為"隔"就把上面中文文字搜尋出來如何實現
方式1.透過ngram分詞器,即對分詞再做拆分,比如"隔山撬"以min_gram=1(最小長度為1),max_gram=2(最大長度為2)拆分,會被拆分為"隔" "隔山" "山" "山撬"
這種方法也有侷限:1.增加索引大小;2. n-gram 設定不當,可能會導致不準確的結果,這裡不做具體討論
方式2.(我採用的),將中文和英文拆分為以字元為單位,顆粒度最小
那麼"隔山撬是白首烏" 會被拆分為 "隔" "山" "撬" "是" "白" "首" "烏" ,無論檢索前面的任意組合都可以檢索出資料,提升了資料檢索出結果的能力
再對檢索加一些權重,比如精確查詢查詢(term),短語匹配(match phrase)等,能滿足大部分需求