SQL Server 2000 全文檢索技術(shù)(1)
隨著海量信息的出現(xiàn)以及計算機存儲技術(shù)的發(fā)展,文獻數(shù)據(jù)庫正由書目數(shù)據(jù)庫向全文數(shù)據(jù)庫轉(zhuǎn)變。這一轉(zhuǎn)變使得全文檢索技術(shù)得到空前的發(fā)展。
常用的實現(xiàn)全文檢索的方法主要有以下兩種:
第一種方法是不對數(shù)據(jù)庫建立索引而直接對文章進行匹配的方法。這種方法由于沒有建立索引庫,因此所占空間較少,但同時正是因為它沒有索引庫,所以在進行全文匹配時要花費大量的時間。
第二種方法則是一種為全文建立倒排索引庫的方法。這種方法可以大大節(jié)省檢索的時間。但同時,這種方法需要占用一定的存儲空間來建立索引庫。目前,國內(nèi)外對全文檢索的研究可以說是達到一個高潮。許多研究機構(gòu)和商業(yè)組織都在進行這方面的研究。國際最具影響力的全文檢索評估機構(gòu)當屬TREC(Text Retrieval Conference)。它是由美國技術(shù)和標準研究所(NIST)和美國高級研究計劃局(DARPA)共同舉辦、自1992年以來每年一次的全文檢索評估會議,會議參加者帶來研究的檢索系統(tǒng)以供專家進行評估。傳統(tǒng)的信息單位,圖書館等也開始建立全文數(shù)據(jù)庫,引進各種全文檢索技術(shù)。一些軟件公司,也紛紛推出全文檢索軟件。國內(nèi)比較有代表性的如TRS等,而國外比較著名的有下文將要介紹的Microsoft公司開發(fā)的SQL Server 2000。
2 在SQL Server 2000中配置全文檢索服務(wù)
SQL Server是Microsoft公司在原來和Sybase公司合作的基礎(chǔ)上推出的一款面向高端的數(shù)據(jù)庫系統(tǒng)。而SQL Server 2000版本則是最新的、大型聯(lián)機事務(wù)處理的新型數(shù)據(jù)庫平臺。它繼承了SQL Server以前版本的一些強大的優(yōu)勢,如簡單易用、具有良好的穩(wěn)定性和高效性等等。同時,它的功能比以前的版本更加強大,界面更加友好。總之,無論是在功能、安全性、可維護性,還是在易操作性上都較以前版本有了長足的進步。它的全文檢索功能配置簡單,使用十分方便。我在建立關(guān)于信息檢索的英文論文題名、文摘數(shù)據(jù)庫的過程中,使用了SQLServer 2000。由于文摘文本單詞量平均在500個左右,而且論文記錄數(shù)量較多,如果不為文摘建立全文索引庫,將嚴重影響檢索效率。因此,我使用SQL Server2000的全文檢索功能為這個數(shù)據(jù)庫提供了全文檢索服務(wù)。
2.1 建立全文檢索服務(wù)的過程如下:
第一步,在SQL Server中建立一個全文數(shù)據(jù)庫English—Data。在該數(shù)據(jù)庫中建立一個表Papers。該表的字段有pa—per__id(代表論文的順序,數(shù)據(jù)類型為int,長度為4,要求非空,并為標知,標知種子為1,自動增量為1)、paperAitle(代表論文的題目,數(shù)據(jù)類型為vchar,長度為200,要求非空)、pa—per_abstract(代表論文的文摘,數(shù)據(jù)類型為vchar,長度為8000,要求非空)。
第二步,為建立全文索引,一定要為該表建立唯一索引(Unique Index)。我為Papers表的paper_id字段建立唯一索引。
第三步,將數(shù)據(jù)逐步導(dǎo)入到表Papers中。
第四步,打開SQL Server的企業(yè)管理器,在左側(cè)的樹視中點擊數(shù)據(jù)庫。然后點開數(shù)據(jù)庫EnglishData.。選擇“全文目錄”。點擊右鍵,選擇“新建全文目錄”,建立全文目錄Paper-AbstractFullSearch,然后建立名稱為AbstraetSearch的調(diào)度。其他接受默認。
第五步,選擇企業(yè)管理器的右側(cè)的表Papers,單擊右鍵,選中“全文索引表”,單擊“在表上建立全文索引”。將會出現(xiàn)“全文索引向?qū)А贝翱?。點擊“下一步”會到達“選擇索引”窗口。由于本表只有一個唯一索引paper_id,點擊“下一步”,會出現(xiàn)“選擇表中的列”窗口。選擇“paper_abstract”字段,然后點擊“下一步”,出現(xiàn)“選擇目錄”窗口,接受默認配置,點擊“下一步”,出現(xiàn)的窗口“選擇或創(chuàng)建填充調(diào)度(可選)”窗口,接受默認配置再點擊下一步。出現(xiàn)“正在完成SQL Server全文索引向?qū)А?,點擊“完成”。完成配置。
第六步,選擇表Papers,點擊右鍵,選擇“全文索引表”,點擊“啟動完全填充”,等待完成。
第七步,配置數(shù)據(jù)源名。在ODBC管理器中的“系統(tǒng)DSN”中,單擊“添加”,選擇“SQL Server”。在數(shù)據(jù)源名中輸入“EnglishData”, 然后進行客戶配置。
第八步,如果以后對表Papers進行任何的修改(包括添加、刪除記錄和對原記錄進行編輯),都要重復(fù)第六步的操作。這一步是為了保證全文索引庫能夠與表Papers的修改同步。
以上是建立全文索引的全過程。完成建立后,即可以使用標準的T—SQL語句對其進行全文檢索。
2.2 在web平臺上進行全文檢索
雖然使用T—sQL語句可以很方便地進行全文檢索,但筆者考慮到不是所有的用戶都掌握了T—sQL語句,因此為方便用戶檢索,筆者建立了一個基于Web界面的全文檢索平臺。用戶只需將檢索詞提交給Web服務(wù)器,服務(wù)器使用ASP調(diào)用ADO控件來對SQL Server2000數(shù)據(jù)庫進行查詢,并將檢索結(jié)果以Web頁面的方式返回給用戶。
??共3頁: 1 [2] [3] 下一頁 ??
?
ASP(Active Server Pages)是微軟公司建立的一套服務(wù)器端腳本環(huán)境。設(shè)計人員可以結(jié)合HTML、ASP指令和ActiveX控件建立動態(tài)、交互且高效的Web服務(wù)器應(yīng)用程序。由于所有的程序都嵌入HTML中且在服務(wù)器端執(zhí)行,因此不必擔心客戶端的瀏覽器能否運行程序。同時,它還具有簡單、易開發(fā)、兼容性好等優(yōu)點。ADO(ActiveX Data Object,ActiveX數(shù)據(jù)對象)是一個ASP內(nèi)置的ActiveX服務(wù)器組件(ActiveX Server Component),用于數(shù)據(jù)庫訪問,可把它與ASP結(jié)合起來,建立提供數(shù)據(jù)庫信息的網(wǎng)頁內(nèi)容,對數(shù)據(jù)庫進行查詢、插入、更新、刪除等操作。ADO對象可以操作所有ODBC驅(qū)動程序存取的數(shù)據(jù)源格式。同時,ADO還具有簡單易用、速度快等優(yōu)點。
SQL Server 2000的全文檢索服務(wù)可以支持布爾檢索和加權(quán)檢索等高級檢索。用ASP可以實現(xiàn)這些檢索功能。
3 全文檢索語句CONTAINS和FREETEXT的使用
全文檢索使用戶可以高效檢索存儲在數(shù)據(jù)庫的char、varchar、text、ntext、nchar、nvarchar等數(shù)據(jù)類型列中的文本數(shù)據(jù)。在進行全文檢索之前,應(yīng)建立和填充數(shù)據(jù)庫全文索引。
3.1 全文索引
為了支持全文索引操作,SQL Server 7.0新增了一些新的存儲過程和Transact-SQL語句。使用這些存儲過程創(chuàng)建全文索引的具體步驟如下(括號內(nèi)為每步所調(diào)用的存儲過程名稱):
(1)啟動數(shù)據(jù)庫的全文處理功能(sp_fulltexLdatabase);
(2)建立全文目錄(sp_fulhexLcatalog);
(3)在全文目錄中注冊需要全文索引的表(sp_fulltext table);
(4)指出表中需要全文檢索的列名(sp_full—texLeolumn);
(5)為表創(chuàng)建全文索引(sp_fulltexLtable);
(6)填充全文目錄(sp_fulltext_catalog)。
下面舉例說明:
在本例中,對test數(shù)據(jù)庫book表中title列和notes列建立全文索引。
//首先先啟動SQL Server的全文搜索服務(wù)。
use test //打開數(shù)據(jù)庫
go
//打開全文索引支持
execute sp_fulltext_database ‘enable’
//建立全文目錄ft_pubs
execute sp_fulltext_catalog ‘ft_test’,‘create’
//為titles表建立全文索引數(shù)據(jù)元,pk_title為book表中由主鍵所建立的唯一索引,此參數(shù)必須。
execute sp_fulltext_table ‘book’,‘create’,‘ft_test’,‘pk_title’
//設(shè)置全文索引列名
execute sp_fulltext_eolumn ‘book’,‘title’,‘ add’
execute sp_fulltext_ column ‘book’,‘notes’,‘a(chǎn)dd’
//建立全文索引
execute sp_fulltexLtable ‘book’,‘a(chǎn)ctivate’
//填充全文索引目錄
execute sp_fulltext_ catalog ‘ft_test’,‘start_ full’
go
至此,全文索引建立完畢。
3.2 全文檢索
SQL Server 2000提供的全文檢索語句主要有CONTAINS和FREETEXT。CONTAINS語句的功能是在表所有列或指定列中搜索:
●一個字或短語;
●一個字或短語的前綴;
●與一個字相近的另一個字;
●一個字的派生字;
●一個重復(fù)出現(xiàn)的字。
CONTAINS語句的語法格式為:
CONTAINS({column *}),‘’) 其中,column說明被搜索列,使用時說明對表中所有全文索引列蓮行搜索
Contains_ search_ condition說明CONTAINS語句的搜索內(nèi)容,其語法格式為:
{||| |) [{|ANDIAND NOT|OR}}] [.n]
下面就simple_term和predix_term參數(shù)做一簡要說明:
simple— term指出CONTAINS語句所搜索的單字或短語,當為一個短語時,必須使用雙引號作為定界符。其格式為:
{word | “phrase”}
predix_term說明CONTAINS語句所搜索的字或短語前綴,其格式為:
{“word * ”| “phrase ”}
例如,下面語句檢索b0ok表的title列和notes列中包含database或computer字符串的圖書名稱及其注釋信息:
select title,notes from book
where contains(tilte,‘database’)or contains(notes,‘datable’)
or contains(title,‘computer’)or contains(notes,‘computer’)
FREETEXT語句的功能是在一個表的所有列或指定列中搜索一個自由文本格式的字符串,并返回與該字符串匹配的數(shù)據(jù)行。所以,F(xiàn)REETEXT語句所執(zhí)行的功能又稱做自由式全文查詢。
FREETEXT語句的語法格式為:
FREETEXT({column * },‘freetext_string’)
其中,column說明被搜索列,使用*時說明對表中的所有全文索引列進行搜索。Freetext_string參數(shù)指出所搜索的自由文本格式字符串。
例如,下面語句使用FREETEXT語句搜索book表中包含Successful Life字符串的數(shù)據(jù)行:
select title,notes
from book
where freetext (*,‘Successful Life’)
4? 結(jié)束語
通過學(xué)習(xí)和實踐,我認為SQLServer2000的全文檢索服務(wù)有以下優(yōu)點:
??共3頁: 上一頁 [1] 2 [3] 下一頁 ??
?
第一,簡單易用。由于SQLServer2000的全文檢索服務(wù)已經(jīng)集成到整個服務(wù)中,因此,全文檢索可以使用“企業(yè)管理器”進行統(tǒng)一的圖形界面的管理。而且,進行檢索時可以使用標準的T—SQL語句,學(xué)習(xí)、使用十分方便。
第二,SQLServer2000功能強大。比如,其自身具有“噪音詞”(noiseterm )過濾的機制。在“.MSSQL\TDATA\SQL Server\config”目錄下,有一個“noise.dat”文件類似于停用詞表,可以對一些沒有檢索意義的詞如a、you等進行過濾而不建立索引。用戶自己也可以對該詞表進行增補,以過濾一些詞。同時,我發(fā)現(xiàn)SQLServer2000的全文檢索存在一些不足。如當用戶對全文索引過的字段進行修改后,需要用戶進行手工的“填充”,而不能機器自動完成這一步,另外該系統(tǒng)對計算機硬件要求較高等等。隨著計算機硬件的發(fā)展以及SQL Server軟件本身的不斷完善,我相信這些不足是可以得到改善的。