此範例說明了如何使用 SQL Server 服務管理員來啟動其它使用者對 writers 與 books 資料表發出全文檢索查詢,這兩個虛構資料表均位於 pubs 資料庫中。如需資料表的說明,請參閱使用預存程序與純量函數管理全文檢索功能。
- 使用 SQL Server 服務管理員,以驗證全文檢索服務 Microsoft Search 已啟動執行。
必要時,您可利用以下的其中一種方法啟動及結束此服務:
- 使用 SQL Server Enterprise Manager 所提供之「全文檢索搜尋服務」的內容功能表
- 使用 SQL Server Service Manager 中之 Microsoft Search Service
- 在 DOS 模式下鍵入 net start mssearch
- 使用 SQL Server Enterprise Manager 所提供之「全文檢索搜尋服務」的內容功能表
- 執行以下的陳述式以確定 pubs 資料庫是否已啟動全文檢索處理的功能:
SELECT DatabaseProperty ('Pubs', 'IsFulltextEnabled' )
如需詳細資訊,請參閱 DATABASEPROPERTY。
傳回 1 表示已啟動全文檢索,0 則否。
- 如果 pubs 資料庫尚未啟動全文檢索處理功能時,請將它啟動 (新建立的資料庫,其預設值為關閉)。使用 pubs 時,請執行以下的預存程序:
sp_fulltext_database 'enable'
如需詳細資訊,請參閱 sp_fulltext_database。
- 藉由執行此 pubs 資料庫中的預存程序,在預設目錄下建立一名稱為 PubsCatalog 的全文檢索目錄:
sp_fulltext_catalog 'PubsCatalog', 'create'
如需詳細資訊,請參閱 sp_fulltext_catalog。
這將會在資料庫系統資料表中建立一關於全文檢索目錄的中繼資料,以及在檔案系統下建立一空的全文檢索目錄。
- 分別對 writers 與 books 資料表執行下列的預存程序各一次以註冊啟動 writers 與 books 資料表的全文檢索處理:
sp_fulltext_table 'writers', 'create', 'PubsCatalog', 'writer_id_index' sp_fulltext_table 'books', 'create', 'PubsCatalog', 'isbn_index'
如需詳細資訊,請參閱 sp_fulltext_table。
兩個資料表均會使用 PubsCatalog 全文檢索目錄。這些預存程序呼叫會建立兩者的全文檢索索引的中繼資料。
- 對每一資料行執行以下的預存程序以對每個資料表指定支援全文檢索查詢的資料行名稱:
sp_fulltext_column 'writers', 'organization', 'add' sp_fulltext_column 'writers', 'bio', 'add' sp_fulltext_column 'books', 'writer_name', 'add' sp_fulltext_column 'books', 'the words', 'add' sp_fulltext_column 'books', 'abstract', 'add'
如需詳細資訊,請參閱sp_fulltext_column。
附註 為了說明上的需要,在此做一個錯誤的示範:在 books 資料表中,已註冊的應該是 writers_name 資料行,而不是 titles。
這些預存程序呼叫會增加兩者的全文檢索索引的中繼資料。
- 對每一個資料表執行下列的預存程序以建立這些資料表的全文檢索索引:
sp_fulltext_table 'writers', 'activate' sp_fulltext_table 'books', 'activate'
實際上,在執行後並不會建立全文檢索索引,而只是在全文檢索目錄中將資料表註冊,這樣資料表的資料才會在下次填入時被加入。
- 執行下列的預存程序來啟動 PubsCatalog 全文檢索目錄的完全填入工作:
sp_fulltext_catalog 'PubsCatalog', 'start_full'
因全文檢索目錄的填入工作並非一同步作業,故不太可能立即建立全文檢索索引。
- 執行以下陳述式來驗證全文檢索目錄 PubsCatalog 執行填入工作的進度:
SELECT FulltextCatalogProperty ( 'PubsCatalog', 'PopulateStatus')
如需詳細資訊,請參閱 FULLTEXTCATALOGPROPERTY。
如果服務的全文檢索目錄閒置,並因而結束,則會傳回 0,若傳回 1 或更大的值,表示在擴展階段。
- 發出 Transact-SQL 查詢以確認已正確執行管理。例如:
SELECT B.writer_name, B.pub_date, B.the_words, A.royalties_ytd FROM writers A, books B WHERE A.writer_name = B.writer_name AND A.citizenship = 'Canadian' AND CONTAINS (B.the_words, '"Indexing Service" NEAR "Indexing Service"') SELECT writer_name, pub_date, abstract FROM books WHERE CONTAINS (title, '"Classic" NEAR "French" NEAR "Cooking"')
最後一行的查詢結果會產生錯誤,因為資料行 title 並無啟動全文查詢功能
- 執行以下陳述式以檢查錯誤:
SELECT ColumnProperty ( ObjectId('books'), 'title', 'IsFullTextIndexed' )
如需詳細資訊,請參閱 COLUMNPROPERTY。
若傳回值為 1,表示 title 資料行為 books 資料表中的全文檢索索引之一;0 則不是。
- 若要列出在資料表 books 內,所有參與全文檢索處理的資料行,您可執行以下的預存程序:
sp_help_fulltext_columns 'books'
如需詳細資訊,請參閱 sp_help_fulltext_columns。
附註 查詢結果顯示有錯誤產生;即 writer_name 資料行存在於全文檢索索引的定義中,而非 title 資料行。
- 執行以下預存程序,使 books 資料表停用。以便將 title 資料行加入全文檢索索引並移除 writer_name 資料行:
sp_fulltext_table 'books', 'deactivate'
為了進行資料行的刪除與新增,停用 books 資料表意味資料表不再參與填入 PubsCatalog 全文檢索目錄的工作。然而,中繼資料仍無改變,且資料表可重新啟動。直到下次 PubsCatalog 全文檢索目錄在作填入時,現有 books 資料表內的全文檢索索引才會變更,但因為 Microsoft® SQL Server™ 凍結對已停用的資料表進行查詢,故現有 books 資料表內的全文檢索索引未被使用。
- 在 books 資料表的全文檢索索引中繼資料裡,加入 title 資料行及移除 writer_name 資料行。針對每個資料行執行一次此預存程序:
sp_fulltext_column 'books', 'writer_name', 'drop' sp_fulltext_column 'books', 'title', 'add'
如需詳細資訊,請參閱 sp_fulltext_column。
- 使用以下的預存程序將 books 資料表重新啟動:
sp_fulltext_table 'books', 'activate'
如果資料表重新啟動,但索引尚未作重填入時,舊的索引仍可用來對已啟用全文檢索索引的舊資料行作查詢,但無法對任何啟用全文檢索索引的新資料行作查詢。在重新填入之前,被刪除資料行中的資料可以與查詢 (查詢會藉由為資料行名稱鍵入星號 (*) 來指定搜尋所有的全文檢索索引資料行) 相符。
- 執行以下的預存程序,以啟動 PubsCatalog 全文檢索目錄的累加填入工作:
sp_fulltext_catalog 'PubsCatalog', 'start_incremental'
累加填入會重新整理全文檢索目錄,方法是使用下列特色將具有全文檢索功能的資料行中的資料編列索引:
- 從上回的填入工作完成後,已被更新或插入的資料列。
- 含有 timestamp 資料行的資料表。
- 自上回填入後所有已啟動全文檢索處理功能的資料列,或有結構 (此架構自上回填入後經過修改) 的資料列。
- 從上回的填入工作完成後,已被更新或插入的資料列。
- 在完成 PubsCatalog 全文檢索目錄的重填入後,從步驟 10,再次發出 Transact-SQL 查詢時,不會有任何錯誤發生。