要實現搜尋引擎的模糊尋找功能,使用SQL的關鍵字LIKE來實現模式比對。
現在我們有一個資料庫,表名叫T1,有記錄數一萬條。Title欄位是文字欄位,長度為255,Body為備忘欄位。看下面的SQL語句:
Select * From T1 Where Title Like '%迅雷%'
則這句話就是要返回Table1表中Title欄位裡包含‘迅雷’的所有記錄。由於Title是文字欄位,長度也不大,故其尋找速度還可以接受。
現在我們要返回Title或Body欄位中包含‘迅雷’的所有記錄:
Select * From T1 Where Title Like '%迅雷%' Or Body Like '%迅雷%' 速度慢了許多倍,這樣的速度用於Web搜尋,使用者會有這個耐心去等待嗎?
如何解決在模糊尋找中的速度問題,這就是我們今天要引出的全文索引的話題。
關於全文索引,一個能說明問題的例子就是:
給你一本你沒看過的書,指定書裡面存在的一句話讓你去尋找,而且不能看目錄(索引),那麼你只能一頁一頁的翻書本去尋找了,想一想,你對這本書的內容也不瞭解,這樣的尋找速度會快嗎?
如果允許看目錄(索引),根據目錄(索引)的指引,你也許會更快的找到(如果這個索引和要尋找的話關聯性大)。另外,我們再假如你很喜歡這本書,並且每天閱讀,過一段時間,你已經對書本的內容了如指掌,這個時候,讓你再找一段話,你是不是一下子便能知道這句話大概的位置?然後根據大概位置在附近尋找,然後很快定位搜尋結果。這其實可以說是你已經在你的腦子裡為這本書建立了全文索引。
SQL全文索引就是將資料庫的記錄按詞語做了事先的索引,以便在模糊尋找的時候能提升速度。這些索引的詞語,對於英文,每兩個單詞之間有一個空格,可中文不一樣了,這涉及到中文分詞技術。我們在使用資料庫引擎的時候,引擎的全文索引其實已經使用了分詞的技術,當然這並不能從表面所看到。
我們以MS SQL Server 2000為例,說明如何建立全文索引。
1、啟動全文索引。在Microsoft SQL Server >> SQL Server 組 >> (LOCAL) (Windows NT) >> 支援服務 >> 全文檢索索引 >> 右鍵菜單元 >> 啟動;
2、對資料庫建立全文檢索目錄。在Microsoft SQL Server >> SQL Server 組 >> (LOCAL) (Windows NT) >> 資料庫 >> 全文檢索目錄 >> 右建菜單 >> 建立全文檢索目錄;
3、對所要建立全文索引的表建立全文索引。在Microsoft SQL Server >> SQL Server 組 >> (LOCAL) (Windows NT) >> 資料庫 >> 你的資料庫名 >> 表 >> 雙擊 >> 在右側列表中選擇要建立全文索引的資料表 >> 右建菜單 >> 全文索引表 >> 在表上定義全文索引 , 按嚮導,選擇要建立全文索引的欄位和全文檢索目錄,完成操作。注意,你的資料表必須有主鍵,否則會出現如下錯誤提示:“所選表中沒有在不允許 NULL 的列上的唯一單個列索引”。
4、對上一步建立全文索引時選擇的全文檢索目錄進行填充。在Microsoft SQL Server >> SQL Server 組 >> (LOCAL) (Windows NT) >> 資料庫 >> 全文檢索目錄 >> 雙擊 >> 在右側列表中選擇全文檢索目錄 >> 右建菜單 >> 啟動完全填充。注意,填充是需要時間的。
這樣,給資料表建立全文索引之後我們就可以使用CONTAINS來檢索了:
Select * From T1 Where Title Like '%迅雷%' OR CONTAINS(Body, '%迅雷%') 試一試查詢速度,第一次查詢速度還是很慢,當查詢駐入記憶體之後,查詢就快了。已免強可以接受。但第一次查詢速度慢的問題還需要解決,並且以後的查詢離百度搜尋速度還有很大距離。就是說還有很多地方可以完善的