理論部份
前言
在資料庫中快速搜尋資料,使用索引可以提高搜尋速度,然而索引一般是建立在數字型或長度比較短的文字型字段上的,比如說編號、姓名等字段,如果建立在長度比較長的文字型字段上,更新索引將會花銷很多的時間。如在文章內容欄位裡用
like
語句搜尋乙個關鍵字,當資料表裡的內容很多時,這個時間可能會讓人難以忍受。
在sql server
中提供了一種名為全文索引的技術,可以大大提高從長字串裡搜尋資料的速度,在本節裡,將會對全文索引進行詳細的介紹
(1)全文索引概念:
全文索引與普通的索引不同,普通的索引是以
b-tree
結構來維護的,而全文索引是一種特殊型別的基於標記的功能性索引,是由
microsoft sql server
全文引擎服務建立和維護的。
使用全文索引可以快速、靈活地為儲存在
sql server
資料庫中的文字資料建立基於關鍵字查詢的索引,與
like
語句不同,
like
語句的搜尋是適用於字元模式的查詢,而全文索引是根據特定語言的規則對詞和短語的搜尋,是針對語言的搜尋。
(2)
全文索引常用術語
(2.1)
全文索引: 一種特殊的索引,能在給定的列中儲存有關重要的詞及位置的資訊,使用這些資訊可以快速進行全文查詢,搜尋包括特定詞或片語的行.
(2.2)全文目錄:全文目錄是儲存全文索引的地方,全文目錄必須駐留在與sql server
例項相關聯的本地硬碟上,每個全文目錄可用於滿足資料庫內的乙個或多個表的索引需求.
(2.3)
斷字元與詞幹分析器:斷字元與詞幹分析器都是用於對全文索引的資料進行語言分析的.語言分析通常都會涉及到查詢詞的邊界和組合動詞兩個方面,其中要查詢詞的邊界,也就是確定哪幾個字元是"
詞",稱之為"
斷字".
組合動詞也就是詞幹分析,用於分析詞.根據語言的不同,語言分析規則也不盡相同,由此可以為每個全文索引列指定不同的語言.每種語言的斷字元能夠使得訪問語言生成的詞更為準確
(2.4)標記:由斷字元標識的詞或字串
(2.5)篩選器:用於從儲存在
varbinary(max)
或image
列中的檔案內提取指定的文字型別的文字,當
varbinary(max)
或image
列中包含帶有特定副檔名的文件時,全文搜尋會使用篩選器來解釋二進位制資料,篩選器會從文件中提取文字化資訊並用於建立索引.
(2.6)填充(爬網):建立維護全文索引的過程叫填充,也叫爬網.
(2.7)干擾詞:經常出現,但又不是要搜尋的詞.為了精簡全文索引,這些詞通常會被忽略.
(3)全文索引的體系
sql server
的全文索引是由
sql server fulltext search
服務來維護的,該服務可以在
windows
作業系統的【管理工具】-
【服務】裡找到,如圖3
.1所示,在此可以啟動、停止、暫停、恢復和重新啟動該服務.只有
sql server fulltext search
服務在啟動狀態時,才能使用全文索引.
sql server fulltext search
服務由兩個部分元件支援:乙個是
microsoft full-text engine for sql server
(msftesql),
也就是sql server
全文搜尋引擎;另乙個是
microsoft full-text engine filter deamon
(msftefd
),也就是全文搜尋引擎過濾器.
microsoft full-text engine for sql server
的作用是填充全文索引、管理全文索引和全文目錄、幫助對
sql server
資料庫中的資料表進行全文搜尋。
microsoft full-text engine filter deamon
包 含篩選器,協議處理程式和斷字元三個元件,其作用是負責從資料表中訪問和篩選資料以及進行斷字和詞幹分析。其中,篩選器的作用是從文件中提取文字資訊,並 將非文字資訊和格式化資訊(如換行符、字型大小等資訊)刪除,然後生成文字字串和屬性的對應,並將它們傳遞給索引引擎;
協議處理程式用於從指定資料庫中的表內訪問資料;斷字元用於在查詢或抓取的文件中確定字元邊界位置。
全文索引元件負責對全文索引的初始填充以及當全文索引表中的資料被修改時的更新。當全文填充(爬網)開始後,資料庫引擎會將大量的資料儲存到記憶體裡,並通知
microsoft full-text engine for sql server
(msftesql
)開始進行索引。當
msftesql
服務接到進行索引的通知後,使用協議處理程式元件從記憶體中取得資料進行處理後生成全文索引。
msftesql
服務會將資料表中的某一列或幾列中的字元和二進位制資料編製成索引。在對
varbinary(max)
或image
列中的資料編制索引時,篩選器會將基於為該資料指定的檔案格式來提取文字。在處理索引的過程中
msftesql
服務通過斷字元來將收集到的文字資料分隔成各個單獨的標記或關鍵字。這個過程就是全文索引的過程。
由於全文索引與普通的索引不同,全文索引並不是儲存在資料表中,而是儲存在全文目錄中,所以在使用全文索引來搜尋資料時,其執行的流程和普通索引也不一樣。
如圖3.2
所示,當
sql server
發出全文搜尋的請求後,會將搜尋的條件傳遞給全文搜尋引擎過濾器,經過
msftefd
處理後,將資料提供給
msftesql
,再由msftesql
從全文目錄中找到符合要求的資料,再返回給
sql server
進行後續操作。這就是進行全文搜尋的過程
Sql2005 全文索引 一
理論部份 前言在資料庫中快速搜尋資料,使用索引可以提高搜尋速度,然而索引一般是建立在數字型或長度比較短的文字型字段上的,比如說編號 姓名等字段,如果建立在長度比較長的文字型字段上,更新索引將會花銷很多的時間。如在文章內容欄位裡用like語句搜尋乙個關鍵字,當資料表裡的內容很多時,這個時間可能會讓人難...
Sql2005 全文索引 三
實戰篇 續 5 全文索引管理 在建立完全文目錄之後,可以動手建立全文索引了,下面將介紹如何建立 編輯和刪除全文索引.5.1 建立全文索引的注意事項 在建立全文索引之前,先介紹建立全文索引要注意的事項 全文索引是針對資料表的,只能對資料表建立全文索引,不能對資料庫建立全文索引。在乙個資料庫中可以建立多...
Sql2005 全文索引 二
title sql2005 全文索引 二 author wufeng4552 date 2009 10 14 實戰部份 4 全文目錄管理 在前面章節裡提到,全文目錄的作用是儲存全文索引,所以要建立全文索引必須先建立全文目錄 4.1 建立全文目錄 建立全文目錄的方法如下 1 啟動 sql server...