CREATE FULLTEXT INDEX (Transact-SQL)
更新: 2006 年 12 月 12 日
針對資料庫之某份資料表或索引檢視的一或多個資料行建立全文檢索索引。每份資料表或索引檢視只能有一個全文檢索索引。依預設,當建立資料庫時,會啟用資料庫的全文檢索搜尋。
語法
CREATE FULLTEXT INDEX ON table_name
[(column_name [TYPE COLUMN type_column_name]
[LANGUAGE language_term] [,...n])]
KEY INDEX index_name
[ON fulltext_catalog_name]
[WITH
{CHANGE_TRACKING {MANUAL | AUTO | OFF [, NO POPULATION]}}
]
引數
- table_name
這是包括在全文檢索索引中之一或多個資料行所在的資料表或索引檢視名稱。
- column_name
這是包括在全文檢索索引中的一或多個資料行的名稱。只有 char、varchar、nchar、nvarchar、text、ntext、image、xml 和 varbinary 等類型的資料行可以建立全文檢索搜尋的索引。
TYPE COLUMN type_column_name
這是在 table_name 中,用來主控 column_name 之文件類型的資料行名稱。type_column_name 的類型必須是 char、nchar、varchar 或 nvarchar。只有當 column_name 的一或多個資料行的類型為 varbinary(max) 或 image 時,才應指定 type_column_name,否則 SQL Server 會傳回錯誤。
如需詳細資訊,請參閱<全文檢索搜尋篩選>。
LANGUAGE language_term
這是 column_name 所儲存之資料的語言。language_term 是選擇性的,可以指定成對應於語言地區設定識別碼 (LCID) 的字串、整數或十六進位值。如果您指定了 language_term,就會利用它代表的語言來建立 char、nchar、varchar、nvarchar、text 和 ntext 資料行所儲存之資料的索引。這個語言是資料行的全文檢索述詞未指定 language_term 時,在查詢時所用的預設語言。如果未指定任何值,就會使用 SQL Server 執行個體的預設語言。
如果語言不明,或有多個要儲存在 column_name (而這個資料行不是 BLOB 或 XML 資料類型) 的語言,請使用中性 (0x0) 語言。如需詳細資訊,請參閱<全文檢索搜尋的國際化考量>。
請利用 sp_configure 預存程序來存取 Microsoft SQL Server 執行個體的預設全文檢索語言的相關資訊。如需詳細資訊,請參閱<sp_configure (Transact-SQL)>和<default full-text language 選項>。
當指定為字串時,language_term 會對應到 syslanguages 系統資料表中的 alias 資料行值。字串必須以單引號括住,如 'language_term'。當指定為整數時,language_term 是用來識別語言的實際 LCID。當指定為十六進位值時,language_term 是 0x,後面接著 LCID 的十六進位值。十六進位值不能超出 8 位數,開頭的零也包括在內。
如果這個值是雙位元組字元集 (DBCS) 格式,SQL Server 會將它轉換成 Unicode。
您必須針對指定為 language_term 的語言來啟用資源,如斷詞工具和詞幹分析器。如果這些資源不支援指定的語言,SQL Server 會傳回錯誤。
如果是包含多種語言之文字資料的非 BLOB 和非 XML 資料行,或資料行所儲存的文字語言不明,請使用中性 (0x0) 語言資源。如果是儲存在 XML 或 BLOB 類型資料行的文件,在建立索引時,將使用文件內的語言編碼。例如,在 XML 資料行中,XML 文件的 xml:lang 屬性會識別語言。在查詢時,除非在全文檢索查詢中指定 language_term,否則,language_term 先前所指定的值會成為全文檢索查詢所用的預設語言。
- ,... n
指出可以指定多個資料行來建立全文檢索索引。當指定多個資料行時,請用逗號來分開每個資料行。
- KEY INDEX index_name
這是 table_name 的唯一索引鍵索引名稱。KEY INDEX 必須是唯一、單索引鍵,且不允許為 Null 的資料行。請選取最小的唯一索引鍵索引來作為全文檢索唯一索引鍵。建議您使用 CLUSTERED 索引,以取得最佳效能。
ON fulltext_catalog_name
這是全文檢索索引所用的全文檢索目錄。這個目錄必須已存在於資料庫中。這個子句是選擇性的。如果未指定它,就會使用預設目錄。如果沒有預設目錄,SQL Server 會傳回錯誤。fulltext_catalog_name 的檔案群組,如果未指定目錄,則預設全文檢索目錄不得為 READONLY 或 OFFLINE。否則,SQL Server 會傳回錯誤。
WITH CHANGE_TRACKING {MANUAL | AUTO | OFF [ , NO POPULATION]}
指定 SQL Server 是否維護索引資料之所有變更的清單。變更的追蹤並不會取出 WRITETEXT 和 UPDATETEXT 所變更的資料。- MANUAL
指定要利用 SQL Server Agent 來依排程傳播變更追蹤記錄,或由使用者手動傳播變更追蹤記錄。
AUTO
指定 SQL Server 依照相關資料表中所修改的資料來自動更新全文檢索索引。預設值是 AUTO。注意:雖然變更可以自動傳播,但這些變更可能不會立即反映在全文檢索索引中。如需有關用來監視全文檢索索引程序及診斷任何全文檢索索引問題之屬性的詳細資訊,請參閱<使用 Transact-SQL 函數來取得全文檢索屬性值>。
OFF [ , NO POPULATION]
指定 SQL Server 不保留索引資料的變更清單。只有在 CHANGE_TRACKING 是 OFF 時,才能使用 NO POPULATION 選項。當指定 NO POPULATION 時,在建立好索引之後,SQL Server 並不會擴展索引。只有在使用者執行含有 START FULL 或 INCREMENTAL POPULATION 子句的 ALTER FULLTEXT INDEX 命令之後,才傳播索引。當並未指定 NO POPULATION 時,在建立好索引之後,SQL Server 會完整擴展索引。
- MANUAL
權限
使用者必須有全文檢索目錄的 REFERENCES 權限,並具有檢視資料表的 ALTER 權限,或系統管理員 (sysadmin) 固定伺服器角色的成員,或是 db_owner 或 db_ddladmin 固定資料庫角色的成員。
範例
下列範例會在 HumanResources.JobCandidate
資料表上建立全文檢索索引。
USE AdventureWorks;
GO
CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume) KEY INDEX ui_ukJobCand;
GO
請參閱
參考
ALTER FULLTEXT INDEX (Transact-SQL)
DROP FULLTEXT INDEX (Transact-SQL)
GRANT (Transact-SQL)
其他資源
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 12 月 12 日 |
|