SQL Server 2000全文檢索
一、如何在SQL中啟用全文檢索功能
1、證全文檢索服務(wù)是否安裝
通過(guò)儲(chǔ)存過(guò)程FULLTEXTSERVICEPROPERTY(返回有關(guān)全文服務(wù)級(jí)別屬性的信息)來(lái)驗(yàn)證搜索服務(wù)(全文組件)是否安裝。如Select fulltextserviceproperty (‘IsFullTextInstalled’):返回1表示已安裝全文組件;返回0表示未安裝全文組件;返回Null表示輸入無(wú)效或發(fā)生錯(cuò)誤。
2、啟動(dòng)全文檢索服務(wù)(MircoSoft Search)
3、打開數(shù)據(jù)庫(kù)全文索引的支持
為全文索引啟用數(shù)據(jù)庫(kù):
Use Northwind
Exec sp_fulltext_database ‘enable’
從數(shù)據(jù)庫(kù)中刪除所有目錄:
Use Northwind
Exec sp_fulltext_database ‘disable’
二、建立全文目錄
1、創(chuàng)建全文目錄
Use Northwind
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘create‘
2、重建全文目錄
Use Northwind
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘ rebulid‘
3、啟動(dòng)全文目錄的填充
Use Northwind
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘start_full‘
4、停止全文目錄的填充
Use Northwind
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘stop‘
5、刪除全文目錄
Use Northwind
PK_Products
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘drop‘
三、為表建立全文索引數(shù)據(jù)元
1、建立的唯一索引
Use Northwind
Exec sp_fulltext_table ‘Products‘,‘create‘, ‘ft_ Catalog‘, ‘ PK_Products ‘
2、設(shè)置全文索引列名
Use Northwind
Exec sp_fulltext_table ‘Products‘,‘create‘, ‘ft_ Catalog‘, ‘ PK_Products ‘
3、設(shè)置全文索引列名
Use Northwind
Exec sp_fulltext_column ‘ Products ‘, ProductName‘, ‘a(chǎn)dd‘
Go
Exec sp_fulltext_column ‘ Products ‘, QuantityPerUnit‘, ‘a(chǎn)dd‘
Go
4、激活全文索引
Use Northwind
Exec sp_fulltext_table ‘Products‘,‘a(chǎn)ctivate
5、填充全文索引目錄
Use Northwind
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘start_full‘
四、使用Transact-SQL進(jìn)行全文檢索,我們使用CONTAINS、FREETEXT等謂詞
1、檢索ProductName中,即包含b又包含c的所有列
Use Northwind
SELECT *
FROM Products
WHERE CONTAINS(ProductName, ‘"c*" and "b*" ‘)
2、檢索ProductName中,即包含chai chang tofu之一的所有列
Use Northwind
SELECT *
FROM Products
WHERE FREETEXT(ProductName, ‘chai chang tofu ‘)
五、全文查詢有關(guān)的系統(tǒng)存儲(chǔ)過(guò)程
(1)啟動(dòng)數(shù)據(jù)庫(kù)的全文處理功能(sp_fulltext_datebase);
(2)建立全文目錄(sp_fulltext_catalog);
(3)在全文目錄中注冊(cè)需要全文索引的表(sp_fulltext_table);
(4)指出表中需要全文檢索的列名(sp_fulltext_column)
(5)為表創(chuàng)建全文索引(sp_fulltext_table);
(6)填充全文索引(sp_fulltext_catalog)。
全文查詢支持
Microsoft® SQL Server™ 2000 在接收帶全文構(gòu)造的 Transact-SQL 語(yǔ)句時(shí),使用全文提供程序從 Microsoft 搜索服務(wù)檢索所需信息。全文構(gòu)造是 CONTAINS 或 FREETEXT 謂詞,或者是 CONTAINSTABLE 或 FREETEXTTABLE 行集函數(shù)。如果不知道包含搜索條件的列,全文構(gòu)造可以在全文索引中引用多列。該進(jìn)程的流程如下圖所示。
這一進(jìn)程涉及的步驟包括:
應(yīng)用程序給 SQL Server 實(shí)例發(fā)送帶全文構(gòu)造的 Transact-SQL 語(yǔ)句。
SQL Server 關(guān)系引擎通過(guò)查詢系統(tǒng)表驗(yàn)證全文構(gòu)造,確定全文索引是否覆蓋列引用。關(guān)系引擎將每個(gè) SQL 語(yǔ)句簡(jiǎn)化為一系列行集操作,并使用 OLE DB 將這些操作傳遞給基礎(chǔ)組件,通常是存儲(chǔ)引擎。關(guān)系引擎通過(guò)全文提供程序而不是存儲(chǔ)引擎,將任何全文構(gòu)造轉(zhuǎn)換成對(duì)行集的請(qǐng)求。請(qǐng)求的行集是滿足搜索條件和等級(jí)的鍵集,而這個(gè)等級(jí)表示每個(gè)鍵的數(shù)據(jù)滿足搜索條件的程度。向全文提供程序發(fā)送的行集請(qǐng)求命令包括全文檢索條件。
全文提供程序驗(yàn)證請(qǐng)求并將搜索條件更改為由Microsoft 搜索服務(wù)的查詢支持組件使用的形式。將請(qǐng)求發(fā)送到搜索服務(wù)。
查詢支持組件使用搜索引擎組件從全文索引析取所請(qǐng)求的數(shù)據(jù)。然后以行集的形式將這些數(shù)據(jù)傳遞回全文提供程序。
全文提供程序?qū)⑦@個(gè)行集返回給關(guān)系引擎。
關(guān)系引擎將它從存儲(chǔ)引擎和全文提供程序收到的所有行集進(jìn)行組合,以生成發(fā)送回客戶端的最終結(jié)果集。
全文目錄和索引
Microsoft® SQL Server™ 2000 全文索引為在字符串?dāng)?shù)據(jù)中進(jìn)行復(fù)雜的詞搜索提供有效支持。全文索引存儲(chǔ)關(guān)于重要詞和這些詞在特定列中的位置的信息。全文查詢利用這些信息,可快速搜索包含具體某個(gè)詞或一組詞的行。
全文索引包含在全文目錄中。每個(gè)數(shù)據(jù)庫(kù)可以包含一個(gè)或多個(gè)全文目錄。一個(gè)目錄不能屬于多個(gè)數(shù)據(jù)庫(kù),而每個(gè)目錄可以包含一個(gè)或多個(gè)表的全文索引。一個(gè)表只能有一個(gè)全文索引,因此每個(gè)有全文索引的表只屬于一個(gè)全文目錄。
全文目錄和索引不存儲(chǔ)在它們所屬的數(shù)據(jù)庫(kù)中。目錄和索引由 Microsoft 搜索服務(wù)分開管理。
全文索引必須在基表上定義,而不能在視圖、系統(tǒng)表或臨時(shí)表上定義。 全文索引的定義包括:
能唯一標(biāo)識(shí)表中各行的列(主鍵或候選鍵),而且不允許 NULL 值。
索引所覆蓋的一個(gè)或多個(gè)字符串列。
全文索引由鍵值填充。每個(gè)鍵的項(xiàng)提供與該鍵相關(guān)聯(lián)的重要詞(干擾詞或終止詞除外)、它們所在的列和它們?cè)诹兄械奈恢玫扔嘘P(guān)信息。
格式化文本字符串(如 Microsoft® Word™ 文檔文件或 HTML 文件)不能存儲(chǔ)在字符串或 Unicode 列中,因?yàn)檫@些文件中的許多字節(jié)包含不構(gòu)成有效字符的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)庫(kù)應(yīng)用程序可能仍需要訪問(wèn)這些數(shù)據(jù)并對(duì)其應(yīng)用全文檢索。因?yàn)?image 列并不要求每一字節(jié)都構(gòu)成一個(gè)有效字符,所以許多站點(diǎn)將這類數(shù)據(jù)存儲(chǔ)在 image 列中。SQL Server 2000 引入了對(duì)存儲(chǔ)在 image 列中的這些類型的數(shù)據(jù)執(zhí)行全文檢索的能力。SQL Server 2000 提供篩選,可從 Microsoft Office™ 文件(.doc、.xls 和 .ppt 文件)、文本文件(.txt 文件)及 HTML 文件(.htm 文件)中析取文本化數(shù)據(jù)。設(shè)計(jì)表時(shí)除包括保存數(shù)據(jù)的 image 列外,還需包括綁定列來(lái)保存存儲(chǔ)在 image 列中的數(shù)據(jù)格式的文件擴(kuò)展名。可以創(chuàng)建引用 image 列和綁定列的全文索引,以便在存儲(chǔ)于 image 列中的文本化信息上啟用全文檢索。SQL Server 2000 全文檢索引擎使用綁定列中的文件擴(kuò)展名信息,選擇從列中析取文本化數(shù)據(jù)的合適的篩選。
全文索引是用于執(zhí)行兩個(gè) Transact-SQL 謂詞的組件,以便根據(jù)全文檢索條件對(duì)行進(jìn)行測(cè)試:
CONTAINS
FREETEXT
Transact-SQL 還包含兩個(gè)返回符合全文檢索條件的行集的函數(shù):
CONTAINSTABLE
FREETEXTTABLE
SQL Server 在內(nèi)部將搜索條件發(fā)送給 Microsoft 搜索服務(wù)。Microsoft 搜索服務(wù)查找所有符合全文檢索條件的鍵并將它們返回給 SQL Server。SQL Server 隨后使用鍵的列表來(lái)確定表中要處理的行。
全文索引
對(duì) Microsoft® SQL Server™ 2000 數(shù)據(jù)的全文支持涉及兩個(gè)功能:對(duì)字符數(shù)據(jù)發(fā)出查詢的能力和創(chuàng)建及維護(hù)基礎(chǔ)索引以簡(jiǎn)化這些查詢的能力。
全文索引在許多地方與普通的 SQL 索引不同。
|
普通 SQL 索引
|
全文索引
|
|
存儲(chǔ)時(shí)受定義它們所在的數(shù)據(jù)庫(kù)的控制。
|
存儲(chǔ)在文件系統(tǒng)中,但通過(guò)數(shù)據(jù)庫(kù)管理。
|
|
每個(gè)表允許有若干個(gè)普通索引。
|
每個(gè)表只允許有一個(gè)全文索引。
|
|
當(dāng)對(duì)作為其基礎(chǔ)的數(shù)據(jù)進(jìn)行插入、更新或刪除時(shí),它們自動(dòng)更新。
|
將數(shù)據(jù)添加到全文索引稱為填充,全文索引可通過(guò)調(diào)度或特定請(qǐng)求來(lái)請(qǐng)求,也可以在添加新數(shù)據(jù)時(shí)自動(dòng)發(fā)生。
|
|
不分組。
|
在同一個(gè)數(shù)據(jù)庫(kù)內(nèi)分組為一個(gè)或多個(gè)全文目錄。
|
|
使用 SQL Server 企業(yè)管理器、向?qū)Щ?Transact-SQL 語(yǔ)句創(chuàng)建和除去。
|
使用 SQL Server 企業(yè)管理器、向?qū)Щ虼鎯?chǔ)過(guò)程創(chuàng)建、管理和除去。
|
這些差異使大量管理任務(wù)變得不可缺少。全文管理是在幾個(gè)層次上實(shí)施的:
服務(wù)器
可以對(duì)服務(wù)器范圍的某些屬性(如 resource_usage)加以設(shè)置,以便增加或減少全文服務(wù)所使用的系統(tǒng)資源數(shù)量。
說(shuō)明 全文引擎作為名為 Microsoft 搜索的服務(wù)在 Microsoft Windows NT® Server 和 Microsoft Windows® 2000 Server 上運(yùn)行。對(duì)于 Microsoft SQL Server 個(gè)人版,Microsoft 搜索服務(wù)不可用。盡管這意味著 Microsoft 搜索服務(wù)既未安裝在 Microsoft Windows 95/98 上,也未安裝在 Windows NT 工作站或 Windows 2000 Professional 客戶端上,但這些客戶端在連接到 SQL Server 標(biāo)準(zhǔn)版安裝或企業(yè)版實(shí)例時(shí)可以使用這項(xiàng)服務(wù)。
數(shù)據(jù)庫(kù)
必須啟用數(shù)據(jù)庫(kù)才能使用全文服務(wù)??梢栽谝褑⒂玫臄?shù)據(jù)庫(kù)中創(chuàng)建和除去一個(gè)或多個(gè)全文目錄的元數(shù)據(jù)。
全文目錄
全文目錄包含數(shù)據(jù)庫(kù)中的全文索引。每個(gè)目錄可以用于數(shù)據(jù)庫(kù)內(nèi)的一個(gè)或多個(gè)表的索引需求。該目錄中的索引是使用這里介紹的管理功能來(lái)填充的。(全文目錄必須駐留在與 SQL Server 實(shí)例相關(guān)聯(lián)的本地硬盤驅(qū)動(dòng)器上。不支持可移動(dòng)的驅(qū)動(dòng)器、軟盤和網(wǎng)絡(luò)驅(qū)動(dòng)器)。在每個(gè)服務(wù)器上最多可創(chuàng)建 256 個(gè)全文目錄。
說(shuō)明 Windows NT 故障轉(zhuǎn)移群集環(huán)境完全支持全文索引。有關(guān)更多信息,請(qǐng)參見在故障轉(zhuǎn)移群集中運(yùn)行全文查詢。
表
首先,必須為全文支持啟用表。然后,為與該表相關(guān)聯(lián)的全文索引創(chuàng)建元數(shù)據(jù)(如表名及其全文目錄)。表啟用后,可以用為全文支持而啟用的列中的數(shù)據(jù)填充它。如果表的全文定義被更改(例如,添加一個(gè)也將為全文檢索而索引的新列),則必須重新填充相關(guān)的全文目錄以使全文索引與新的全文定義同步。
列
可以從非活動(dòng)的注冊(cè)表中添加或除去支持全文查詢的列。
在所有這些級(jí)別上,可使用工具檢索元數(shù)據(jù)和狀態(tài)信息。
和常規(guī) SQL 索引一樣,當(dāng)在相關(guān)表中修改數(shù)據(jù)時(shí),可自動(dòng)更新全文索引?;蛘?,也可以適當(dāng)?shù)拈g隔手工重新填充全文索引。這種重寫可能既耗時(shí)又大量占用資源,因此,在數(shù)據(jù)庫(kù)活動(dòng)較少時(shí),這通常是在后臺(tái)運(yùn)行的異步進(jìn)程。
應(yīng)將具有相同更新特性的表(如更改少的與更改多的,或在一天的特定時(shí)段內(nèi)頻繁更改的表)組合在一起,并分配給相同的全文目錄。通過(guò)以此方法設(shè)置全文目錄填充調(diào)度,使得全文索引和表保持同步,且在數(shù)據(jù)庫(kù)活動(dòng)較多時(shí)不對(duì)數(shù)據(jù)庫(kù)服務(wù)器的資源使用產(chǎn)生負(fù)面影響。
為全文目錄中的表安排全文索引的位置是非常重要的。在為全文目錄指定表時(shí),應(yīng)該注意下列基本原則:
始終選擇可用于全文唯一鍵的最小唯一索引。(4 個(gè)字節(jié)且基于整數(shù)的索引是最佳的。)這將顯著減少文件系統(tǒng)中 Microsoft 搜索服務(wù)所需要的資源。如果主鍵很大(超過(guò) 100 字節(jié)),可以考慮選擇表中其它唯一索引(或創(chuàng)建另一個(gè)唯一索引)作為全文唯一鍵。否則,如果全文唯一鍵的大小達(dá)到允許的上限(450 字節(jié)),全文填充將無(wú)法繼續(xù)進(jìn)行。
如果進(jìn)行索引的表有成千上萬(wàn)行,請(qǐng)將該表指定給其自己的全文目錄。
應(yīng)該考慮對(duì)其進(jìn)行全文索引的表中發(fā)生的更改數(shù)以及表的行數(shù)。如果要更改的總行數(shù),加上上次全文填充期間表中出現(xiàn)的行數(shù)達(dá)到成千上萬(wàn)行,請(qǐng)將該表指定給其自己的全文目錄。
一、如何在SQL中啟用全文檢索功能
1、證全文檢索服務(wù)是否安裝
通過(guò)儲(chǔ)存過(guò)程FULLTEXTSERVICEPROPERTY(返回有關(guān)全文服務(wù)級(jí)別屬性的信息)來(lái)驗(yàn)證搜索服務(wù)(全文組件)是否安裝。如Select fulltextserviceproperty (‘IsFullTextInstalled’):返回1表示已安裝全文組件;返回0表示未安裝全文組件;返回Null表示輸入無(wú)效或發(fā)生錯(cuò)誤。
2、啟動(dòng)全文檢索服務(wù)(MircoSoft Search)
3、打開數(shù)據(jù)庫(kù)全文索引的支持
為全文索引啟用數(shù)據(jù)庫(kù):
Use Northwind
Exec sp_fulltext_database ‘enable’
從數(shù)據(jù)庫(kù)中刪除所有目錄:
Use Northwind
Exec sp_fulltext_database ‘disable’
二、建立全文目錄
1、創(chuàng)建全文目錄
Use Northwind
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘create‘
2、重建全文目錄
Use Northwind
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘ rebulid‘
3、啟動(dòng)全文目錄的填充
Use Northwind
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘start_full‘
4、停止全文目錄的填充
Use Northwind
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘stop‘
5、刪除全文目錄
Use Northwind
PK_Products
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘drop‘
三、為表建立全文索引數(shù)據(jù)元
1、建立的唯一索引
Use Northwind
Exec sp_fulltext_table ‘Products‘,‘create‘, ‘ft_ Catalog‘, ‘ PK_Products ‘
2、設(shè)置全文索引列名
Use Northwind
Exec sp_fulltext_table ‘Products‘,‘create‘, ‘ft_ Catalog‘, ‘ PK_Products ‘
3、設(shè)置全文索引列名
Use Northwind
Exec sp_fulltext_column ‘ Products ‘, ProductName‘, ‘a(chǎn)dd‘
Go
Exec sp_fulltext_column ‘ Products ‘, QuantityPerUnit‘, ‘a(chǎn)dd‘
Go
4、激活全文索引
Use Northwind
Exec sp_fulltext_table ‘Products‘,‘a(chǎn)ctivate
5、填充全文索引目錄
Use Northwind
Exec sp_fulltext_catalog ‘ft_ Catalog ‘, ‘start_full‘
四、使用Transact-SQL進(jìn)行全文檢索,我們使用CONTAINS、FREETEXT等謂詞
1、檢索ProductName中,即包含b又包含c的所有列
Use Northwind
SELECT *
FROM Products
WHERE CONTAINS(ProductName, ‘"c*" and "b*" ‘)
2、檢索ProductName中,即包含chai chang tofu之一的所有列
Use Northwind
SELECT *
FROM Products
WHERE FREETEXT(ProductName, ‘chai chang tofu ‘)
五、全文查詢有關(guān)的系統(tǒng)存儲(chǔ)過(guò)程
(1)啟動(dòng)數(shù)據(jù)庫(kù)的全文處理功能(sp_fulltext_datebase);
(2)建立全文目錄(sp_fulltext_catalog);
(3)在全文目錄中注冊(cè)需要全文索引的表(sp_fulltext_table);
(4)指出表中需要全文檢索的列名(sp_fulltext_column)
(5)為表創(chuàng)建全文索引(sp_fulltext_table);
(6)填充全文索引(sp_fulltext_catalog)。
全文查詢支持
Microsoft® SQL Server™ 2000 在接收帶全文構(gòu)造的 Transact-SQL 語(yǔ)句時(shí),使用全文提供程序從 Microsoft 搜索服務(wù)檢索所需信息。全文構(gòu)造是 CONTAINS 或 FREETEXT 謂詞,或者是 CONTAINSTABLE 或 FREETEXTTABLE 行集函數(shù)。如果不知道包含搜索條件的列,全文構(gòu)造可以在全文索引中引用多列。該進(jìn)程的流程如下圖所示。
這一進(jìn)程涉及的步驟包括:
應(yīng)用程序給 SQL Server 實(shí)例發(fā)送帶全文構(gòu)造的 Transact-SQL 語(yǔ)句。
SQL Server 關(guān)系引擎通過(guò)查詢系統(tǒng)表驗(yàn)證全文構(gòu)造,確定全文索引是否覆蓋列引用。關(guān)系引擎將每個(gè) SQL 語(yǔ)句簡(jiǎn)化為一系列行集操作,并使用 OLE DB 將這些操作傳遞給基礎(chǔ)組件,通常是存儲(chǔ)引擎。關(guān)系引擎通過(guò)全文提供程序而不是存儲(chǔ)引擎,將任何全文構(gòu)造轉(zhuǎn)換成對(duì)行集的請(qǐng)求。請(qǐng)求的行集是滿足搜索條件和等級(jí)的鍵集,而這個(gè)等級(jí)表示每個(gè)鍵的數(shù)據(jù)滿足搜索條件的程度。向全文提供程序發(fā)送的行集請(qǐng)求命令包括全文檢索條件。
全文提供程序驗(yàn)證請(qǐng)求并將搜索條件更改為由Microsoft 搜索服務(wù)的查詢支持組件使用的形式。將請(qǐng)求發(fā)送到搜索服務(wù)。
查詢支持組件使用搜索引擎組件從全文索引析取所請(qǐng)求的數(shù)據(jù)。然后以行集的形式將這些數(shù)據(jù)傳遞回全文提供程序。
全文提供程序?qū)⑦@個(gè)行集返回給關(guān)系引擎。
關(guān)系引擎將它從存儲(chǔ)引擎和全文提供程序收到的所有行集進(jìn)行組合,以生成發(fā)送回客戶端的最終結(jié)果集。
全文目錄和索引
Microsoft® SQL Server™ 2000 全文索引為在字符串?dāng)?shù)據(jù)中進(jìn)行復(fù)雜的詞搜索提供有效支持。全文索引存儲(chǔ)關(guān)于重要詞和這些詞在特定列中的位置的信息。全文查詢利用這些信息,可快速搜索包含具體某個(gè)詞或一組詞的行。
全文索引包含在全文目錄中。每個(gè)數(shù)據(jù)庫(kù)可以包含一個(gè)或多個(gè)全文目錄。一個(gè)目錄不能屬于多個(gè)數(shù)據(jù)庫(kù),而每個(gè)目錄可以包含一個(gè)或多個(gè)表的全文索引。一個(gè)表只能有一個(gè)全文索引,因此每個(gè)有全文索引的表只屬于一個(gè)全文目錄。
全文目錄和索引不存儲(chǔ)在它們所屬的數(shù)據(jù)庫(kù)中。目錄和索引由 Microsoft 搜索服務(wù)分開管理。
全文索引必須在基表上定義,而不能在視圖、系統(tǒng)表或臨時(shí)表上定義。 全文索引的定義包括:
能唯一標(biāo)識(shí)表中各行的列(主鍵或候選鍵),而且不允許 NULL 值。
索引所覆蓋的一個(gè)或多個(gè)字符串列。
全文索引由鍵值填充。每個(gè)鍵的項(xiàng)提供與該鍵相關(guān)聯(lián)的重要詞(干擾詞或終止詞除外)、它們所在的列和它們?cè)诹兄械奈恢玫扔嘘P(guān)信息。
格式化文本字符串(如 Microsoft® Word™ 文檔文件或 HTML 文件)不能存儲(chǔ)在字符串或 Unicode 列中,因?yàn)檫@些文件中的許多字節(jié)包含不構(gòu)成有效字符的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)庫(kù)應(yīng)用程序可能仍需要訪問(wèn)這些數(shù)據(jù)并對(duì)其應(yīng)用全文檢索。因?yàn)?image 列并不要求每一字節(jié)都構(gòu)成一個(gè)有效字符,所以許多站點(diǎn)將這類數(shù)據(jù)存儲(chǔ)在 image 列中。SQL Server 2000 引入了對(duì)存儲(chǔ)在 image 列中的這些類型的數(shù)據(jù)執(zhí)行全文檢索的能力。SQL Server 2000 提供篩選,可從 Microsoft Office™ 文件(.doc、.xls 和 .ppt 文件)、文本文件(.txt 文件)及 HTML 文件(.htm 文件)中析取文本化數(shù)據(jù)。設(shè)計(jì)表時(shí)除包括保存數(shù)據(jù)的 image 列外,還需包括綁定列來(lái)保存存儲(chǔ)在 image 列中的數(shù)據(jù)格式的文件擴(kuò)展名。可以創(chuàng)建引用 image 列和綁定列的全文索引,以便在存儲(chǔ)于 image 列中的文本化信息上啟用全文檢索。SQL Server 2000 全文檢索引擎使用綁定列中的文件擴(kuò)展名信息,選擇從列中析取文本化數(shù)據(jù)的合適的篩選。
全文索引是用于執(zhí)行兩個(gè) Transact-SQL 謂詞的組件,以便根據(jù)全文檢索條件對(duì)行進(jìn)行測(cè)試:
CONTAINS
FREETEXT
Transact-SQL 還包含兩個(gè)返回符合全文檢索條件的行集的函數(shù):
CONTAINSTABLE
FREETEXTTABLE
SQL Server 在內(nèi)部將搜索條件發(fā)送給 Microsoft 搜索服務(wù)。Microsoft 搜索服務(wù)查找所有符合全文檢索條件的鍵并將它們返回給 SQL Server。SQL Server 隨后使用鍵的列表來(lái)確定表中要處理的行。
全文索引
對(duì) Microsoft® SQL Server™ 2000 數(shù)據(jù)的全文支持涉及兩個(gè)功能:對(duì)字符數(shù)據(jù)發(fā)出查詢的能力和創(chuàng)建及維護(hù)基礎(chǔ)索引以簡(jiǎn)化這些查詢的能力。
全文索引在許多地方與普通的 SQL 索引不同。
|
普通 SQL 索引
|
全文索引
|
|
存儲(chǔ)時(shí)受定義它們所在的數(shù)據(jù)庫(kù)的控制。
|
存儲(chǔ)在文件系統(tǒng)中,但通過(guò)數(shù)據(jù)庫(kù)管理。
|
|
每個(gè)表允許有若干個(gè)普通索引。
|
每個(gè)表只允許有一個(gè)全文索引。
|
|
當(dāng)對(duì)作為其基礎(chǔ)的數(shù)據(jù)進(jìn)行插入、更新或刪除時(shí),它們自動(dòng)更新。
|
將數(shù)據(jù)添加到全文索引稱為填充,全文索引可通過(guò)調(diào)度或特定請(qǐng)求來(lái)請(qǐng)求,也可以在添加新數(shù)據(jù)時(shí)自動(dòng)發(fā)生。
|
|
不分組。
|
在同一個(gè)數(shù)據(jù)庫(kù)內(nèi)分組為一個(gè)或多個(gè)全文目錄。
|
|
使用 SQL Server 企業(yè)管理器、向?qū)Щ?Transact-SQL 語(yǔ)句創(chuàng)建和除去。
|
使用 SQL Server 企業(yè)管理器、向?qū)Щ虼鎯?chǔ)過(guò)程創(chuàng)建、管理和除去。
|
這些差異使大量管理任務(wù)變得不可缺少。全文管理是在幾個(gè)層次上實(shí)施的:
服務(wù)器
可以對(duì)服務(wù)器范圍的某些屬性(如 resource_usage)加以設(shè)置,以便增加或減少全文服務(wù)所使用的系統(tǒng)資源數(shù)量。
說(shuō)明 全文引擎作為名為 Microsoft 搜索的服務(wù)在 Microsoft Windows NT® Server 和 Microsoft Windows® 2000 Server 上運(yùn)行。對(duì)于 Microsoft SQL Server 個(gè)人版,Microsoft 搜索服務(wù)不可用。盡管這意味著 Microsoft 搜索服務(wù)既未安裝在 Microsoft Windows 95/98 上,也未安裝在 Windows NT 工作站或 Windows 2000 Professional 客戶端上,但這些客戶端在連接到 SQL Server 標(biāo)準(zhǔn)版安裝或企業(yè)版實(shí)例時(shí)可以使用這項(xiàng)服務(wù)。
數(shù)據(jù)庫(kù)
必須啟用數(shù)據(jù)庫(kù)才能使用全文服務(wù)??梢栽谝褑⒂玫臄?shù)據(jù)庫(kù)中創(chuàng)建和除去一個(gè)或多個(gè)全文目錄的元數(shù)據(jù)。
全文目錄
全文目錄包含數(shù)據(jù)庫(kù)中的全文索引。每個(gè)目錄可以用于數(shù)據(jù)庫(kù)內(nèi)的一個(gè)或多個(gè)表的索引需求。該目錄中的索引是使用這里介紹的管理功能來(lái)填充的。(全文目錄必須駐留在與 SQL Server 實(shí)例相關(guān)聯(lián)的本地硬盤驅(qū)動(dòng)器上。不支持可移動(dòng)的驅(qū)動(dòng)器、軟盤和網(wǎng)絡(luò)驅(qū)動(dòng)器)。在每個(gè)服務(wù)器上最多可創(chuàng)建 256 個(gè)全文目錄。
說(shuō)明 Windows NT 故障轉(zhuǎn)移群集環(huán)境完全支持全文索引。有關(guān)更多信息,請(qǐng)參見在故障轉(zhuǎn)移群集中運(yùn)行全文查詢。
表
首先,必須為全文支持啟用表。然后,為與該表相關(guān)聯(lián)的全文索引創(chuàng)建元數(shù)據(jù)(如表名及其全文目錄)。表啟用后,可以用為全文支持而啟用的列中的數(shù)據(jù)填充它。如果表的全文定義被更改(例如,添加一個(gè)也將為全文檢索而索引的新列),則必須重新填充相關(guān)的全文目錄以使全文索引與新的全文定義同步。
列
可以從非活動(dòng)的注冊(cè)表中添加或除去支持全文查詢的列。
在所有這些級(jí)別上,可使用工具檢索元數(shù)據(jù)和狀態(tài)信息。
和常規(guī) SQL 索引一樣,當(dāng)在相關(guān)表中修改數(shù)據(jù)時(shí),可自動(dòng)更新全文索引。或者,也可以適當(dāng)?shù)拈g隔手工重新填充全文索引。這種重寫可能既耗時(shí)又大量占用資源,因此,在數(shù)據(jù)庫(kù)活動(dòng)較少時(shí),這通常是在后臺(tái)運(yùn)行的異步進(jìn)程。
應(yīng)將具有相同更新特性的表(如更改少的與更改多的,或在一天的特定時(shí)段內(nèi)頻繁更改的表)組合在一起,并分配給相同的全文目錄。通過(guò)以此方法設(shè)置全文目錄填充調(diào)度,使得全文索引和表保持同步,且在數(shù)據(jù)庫(kù)活動(dòng)較多時(shí)不對(duì)數(shù)據(jù)庫(kù)服務(wù)器的資源使用產(chǎn)生負(fù)面影響。
為全文目錄中的表安排全文索引的位置是非常重要的。在為全文目錄指定表時(shí),應(yīng)該注意下列基本原則:
始終選擇可用于全文唯一鍵的最小唯一索引。(4 個(gè)字節(jié)且基于整數(shù)的索引是最佳的。)這將顯著減少文件系統(tǒng)中 Microsoft 搜索服務(wù)所需要的資源。如果主鍵很大(超過(guò) 100 字節(jié)),可以考慮選擇表中其它唯一索引(或創(chuàng)建另一個(gè)唯一索引)作為全文唯一鍵。否則,如果全文唯一鍵的大小達(dá)到允許的上限(450 字節(jié)),全文填充將無(wú)法繼續(xù)進(jìn)行。
如果進(jìn)行索引的表有成千上萬(wàn)行,請(qǐng)將該表指定給其自己的全文目錄。
應(yīng)該考慮對(duì)其進(jìn)行全文索引的表中發(fā)生的更改數(shù)以及表的行數(shù)。如果要更改的總行數(shù),加上上次全文填充期間表中出現(xiàn)的行數(shù)達(dá)到成千上萬(wàn)行,請(qǐng)將該表指定給其自己的全文目錄。