2-5 全文檢索技術

 

2-5 全文檢索技術
u      瞭解什麼是全文檢索,全文檢索和普通索引的區別是什麼
u      熟練掌握配置全文檢索服務,瞭解配置全文檢索服務意外處理辦法
u      熟練掌握通過CONTAINSFREETEXT謂詞進行查詢的技巧,可以區分二者之間的差異
u      瞭解全文檢索中降噪詞的作用
 
在一個產品介紹網站中查詢產品時,由於產品的介紹性文字可能會很長,如果使用對產品介紹字段使用like進行模糊查詢,性能肯定會是問題。那麼如何解決這個問題呢?第一個想法就是使用全文索引。那麼全文索引是什麼、應該如何應用、在應用的過程中又應該注意哪些事情呢?
2-5-1 全文檢索概述
1. 什麼是全文檢索
全文索引爲在字符串數據中進行復雜的詞搜索提供有效支持。全文索引存儲關於重要詞和這些詞在特定列中的位置的信息。全文查詢利用這些信息,可快速搜索包含具體某個詞或一組詞的行。
全文索引包含在全文目錄中。每個數據庫可以包含一個或多個全文目錄。一個目錄不能屬於多個數據庫,而每個目錄可以包含一個或多個表的全文索引。一個表只能有一個全文索引,因此每個有全文索引的表只屬於一個全文目錄。全文目錄和索引不存儲在它們所屬的數據庫中。目錄和索引由 Microsoft 搜索服務分開管理。全文索引必須在基表上定義,而不能在視圖、系統表或臨時表上定義。
可以做這樣一個比喻。大家大概都見過檔案櫃,檔案櫃是將各種檔案按照分類登記在檔案索引卡上,這個檔案櫃中的索引卡就象建立的全文索引,通過這些檔案索引卡可以迅速定位你要查找的卷宗所在的位置。如果不建立這些索引卡,如果卷宗數量不多還好,一旦檔案數量很多的時候顯然很難找到期望的卷宗,這就類似使用Like的情形。表2-9所示爲全文檢索的基本原理。
 

2-9 全文檢索基本原理
2. 全文檢索和普通索引的區別
該區別具體見表2-7所示。
2-7 全文檢索和普通索引的區別
普通SQL 索引
全文索引
存儲時受定義它們所在的數據庫的控制
存儲在文件系統中,但通過數據庫管理
每個表允許有若干個普通索引
每個表只允許有一個全文索引
當對作爲其基礎的數據進行插入、更新或刪除時,它們會自動更新
將數據添加到全文索引稱爲填充,全文索引可通過調度或特定請求來請求,也可以在添加新數據時自動發生
不分組
在同一個數據庫內分組爲一個或多個全文目錄
使用SQL Server企業管理器、嚮導或Transact-SQL語句創建和除去
使用SQL Server企業管理器、嚮導或存儲過程創建、管理和除去
2-5-2 配置全文檢索服務實驗
1. 系統初始配置
爲了實驗方便起見,我們選擇某個論壇數據庫bbs,該數據庫中有一張表bbs_ly(留言信息表),該表的屬性ly_content爲留言內容屬性,爲本次實驗主要進行全文配置的屬性。其基本結構見圖2-10所示。
首先建立檢索表的全文檢索,全文檢索要求唯一索引,故需要在相關表建立唯一聚集索引。這一步實驗可以使用SQL DDL或者SQL Server Management Studio建立表的全文檢索,如圖2-11所示;或者通過鍵入命令EXEC SP_FULLTEXT_DATABASE 'Enable'命令達到同樣效果。
USE bbs;
EXEC sp_fulltext_database 'enable';
GO

 

 

 
2-10 ly_content屬性爲留言內容屬性                 2-11 配置bbs_ly 表使用全文索引
2. 定義表的全文檢索目錄和索引字段
展開該數據庫的表,在準備實施全文檢索的表上面用鼠標右鍵通過點擊全文檢索->定義全文檢索將彈出如下執行嚮導,本嚮導執行完畢則該表的全文檢索業已完畢。如圖2-12所示。

2-12 定義表的全文檢索目錄和索引字段
3. 定義表的全文檢索目錄和索引字段
選擇要進行全文檢索的字段,點擊下一步後,出現全文索引向導,一般選擇自動執行更改追蹤。如圖2-13所示。
4. 配置全文索引向導出錯的解決方案
下面首先開始出現的是配置全文索引向導,比較容易出現的填充失敗情況如圖2-14所示。解決的方案是從網上下載SQL Server 2005Sp3補丁,安裝後即可以上面的解決問題。
5. 選擇或創建新的索引目錄
在進行全文檢索時候,必須爲操作數據庫指定索引目錄,從而方便定期更新索引和全文目錄的文件存儲需要,如圖2-15所示。
 

2-13 定義表的全文檢索目錄和索引字段
 

2-14 配置全文索引向導出錯示意圖
 

2-15 選擇或創建新索引目錄
6. 新建表計劃和新建目錄計劃
打開定義填充計劃窗口,分別新建表計劃和新建目錄計劃,如圖2-16所示。
 

2-16 新建表計劃和新建目錄計劃
7. 新建表計劃
首先配置全文索引表計劃,在計劃類型中選擇重複執行,並詳細配置執行的頻率爲每天112128秒執行,無結束日期,點擊確定保存,如圖2-17所示。
 

2-17 新建表計劃
8. 新建目錄計劃
其次配置目錄計劃,配置流程與全文檢索表計劃相同,如圖2-18所示。
 

2-18 新建目錄計劃
9. 新建計劃工作結束
配置完全文索引表計劃和目錄計劃後,將在填充計劃裏面顯示計劃信息內容,點擊下一步繼續全文索引的配置工作,如圖2-19所示。
 

2-19 新建計劃工作結束
10. 新建計劃工作結束
全文索引的配置工作至此完成,系統將顯示配置的詳細列表信息給DBA。點擊完成,全文索引的配置將自動執行索引的配置工作,直至各項全部成功完成爲止。如圖2-202-21所示。
 

2-20 新建計劃工作結束
 

2-21 新建計劃工作結束
11. 查詢全文檢索服務的相關信息
全文索引查詢是通過CONTAINSFREETEXT謂詞進行查詢,下面依次介紹這兩個謂詞:
q        CONTAINS謂詞語法格式:
CONTAINS({column_name|(column_list)|*},‘<contains_search_condition >’)
1:查詢包含電腦愛好者的留言內容
select * from bbs_ly where contains(Ly_content,'電腦愛好者')
2:查詢包含電腦或者寧海內容的留言
select * from bbs_ly where CONTAINS(Ly_content, '"*電腦*" OR "*寧海*"');
 注意:
    如果關鍵詞僅包括干擾詞,則會報如下錯誤:
    CONTAINS({column_name|(column_list)|*},‘<contains_search_condition >’)
    服務器: 消息 7619,級別 16,狀態 1,行 1,全文操作運行失敗。查詢子句只包含被忽略的詞。
小知識:
q         數據庫全文檢索的降噪詞是什麼?
全文索引查詢是建立在windows操作系統的全文檢索基礎之上的查詢方法,我們經常會使用的搜索文件或文件夾的操作就是基於這個原理。在進行全文檢索的時候,檢索者會錄入一些口語中的一些助詞和嘆詞等,比如中文的“的”等。這些詞對於檢索信息而言就是噪音,因此windows操作系統就會根據不同的語言,進行降噪處理。這些噪音詞就保存在操作系統的降噪文件裏面,其文件名是以noise命名,後綴名是具體的國家簡拼。如noise.chs就是中文簡體降噪詞,noise.eng是英文降噪詞,noise.jpn是日文降噪詞等。
MSSQL2005安裝目錄 \Mssql\Ftdata\Sqlserver\Config 下提供了多種語言的干擾詞列表,如果但缺少了 Noise.chs 這個簡體中文的干擾詞文件,就會出現無法進行中文全文檢索的情況。需要注意的是,在MSSQL2000中,其降噪詞文件和操作系統的降噪詞文件是相同的,但是在2005版本中改稱爲noiseCHS.txtnoiseJPN.txt的文件,不論哪種你都可以從其它機器拷貝一份Noise.chs到該目錄,並改名爲noiseCHS.txt Noise.chs文件可以在本機 winnt\system32錄下找到一個同名文件,複製過來更名即可。
q        FREETEXT謂詞語法格式:
FREETEXT({column_name|(column_list)|*},'freetext_string'[,LANGUAGE anguage_term])
1:查詢包含電腦愛好者的留言內容
SELECT * FROM bbs_ly WHERE FREETEXT (Ly_content, '電腦愛好者' );
 注意:
q         使用 FREETEXT 的全文查詢沒有使用 CONTAINS 的全文查詢精度高,這一點讀者可以從檢索的結果看出來。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章