搜尋引擎es-分詞與搜尋

仁义礼智信的發表於2024-08-27

本文只是簡單說明一下分詞與搜尋的概念以及實現邏輯,具體細節不討論

分詞在搜尋引擎中是一個重要概念

分詞是搜尋引擎儲存資料和檢索資料的基本單位,這裡有三個重要點

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)等,能滿足大部分需求

相關文章