一、作用
全文搜索算法適合文本文件的搜索。
二、應用場景
全文搜索算法廣泛應用在各個網站的搜索功能中。
三、全文搜索和正則模糊查詢的區別
1、全文搜索可以把搜索關鍵字進行分割,提取出相關的關鍵詞。
2、正則模糊查詢只能把關鍵字作為整體,不能分割詞匯。
四、全文搜索的思路
(一)把被查詢的文本文件建立索引庫
1、在磁盤中確定一個文件作為索引文件。
索引文件的格式自定義,方便進行查詢。
2、索引文件的作用:
建立關鍵字和文件路徑、出現位置的對應關系。
假設詞匯“漂亮” 出現在文本文件 《我的對象》中,那么這個詞匯在索引中的記錄內容是:
漂亮 : 《我的對象》文件存放路徑 : 出現的起始字節位置
3、如何確定索引文件的內容?
3.1、按照順序讀取文本文件的字符,按照分詞規則忽略無用詞匯,提取關鍵詞匯。
3.2、給每個關鍵詞匯存入一個索引到索引文件里。
(二)開發網絡接口給外部查詢
1、提供HTTP接口給外部查詢
2、查詢思路:
用戶輸入查詢關鍵字,提交給后臺。
后臺獲取關鍵字,開始分詞。
把詞匯到索引文件中查詢。
如果詞匯出現在索引文件中,返回文件的路徑和坐標。
后臺把該文件內容返回(把目標詞匯高亮顯示)。
五、關鍵思路
(一)如何分詞
1、建立忽略詞匯表
把那些代詞、介詞、標點符號組成一個忽略表,用來忽略不計。
例如 我、我們、的、地、你、了
忽略標點符號: 、;,!?。
2、建立關鍵詞匯表
需要用戶不斷的錄入詞匯,方便查詢。
把漢語的詞匯都錄進去,例如:目錄、模型、關鍵、物質、組織、基礎、訓練、右擊、考試、老師等。
3、把文字序列進行分詞
從最左邊開始,判斷每一個字符:
如果在忽略詞匯表中,就忽略該詞匯,讀取下一個字符。
如果在關鍵詞匯表的詞匯中,有詞匯的第一個詞和該詞匯相等,那么讀取下一個字符是否匹配第二個字符。
例如當前字符是‘禮’,在關鍵詞匯表中有 ‘禮儀’這個詞匯的第一個詞匯和它相等,那么讀取第二個字符是否等于‘儀’。
注意:可能只有匹配一個字符也滿足。
4、如果查詢序列和關鍵詞匯表有相等的,就獲取索引文件中出現過的文件。
(二)索引文件如何建立
采用二進制格式,每條記錄連續存放。
單條記錄格式:20字節關鍵字 50字節相關文件路徑 4字節出現的起始索引位置
六、通俗介紹
(一)被搜索的文本文件通過分詞操作,建立索引。
(二)用戶提交關鍵句進行查詢,后臺根據關鍵句子也進行分詞操作,從索引文件中找到關鍵字相等的那些文件路徑,把文件內容返回給用戶。
案例:
1、搜索時有一句話: 我的未來不是夢。
2、分詞后忽略: 我 的 。
3、分詞后獲得的關鍵字:未來 不是 是夢 夢
4、把未來、不是、是夢、夢這四個關鍵字去索引文件里查詢,如果存在就返回對應的文件路徑。
5、假設找到以下文件路徑(這些文件內容中出現過關鍵字):
/doc/關于未來的演講.html
/doc/我的未來生活.txt
/doc/我做了一個夢.doc
6、把這些文件路徑代表的文件讀取,用內容列表返回給用戶。