在資料表和資料行上啟用語意搜尋
適用於:SQL Server
描述如何針對包含文件或文字的選取資料行啟用或停用統計語意索引。
統計語意搜尋會使用全文檢索搜尋所建立的索引,並且建立額外索引。 由於全文檢索搜尋存在這種相依性,因此您可以在定義新的全文檢索索引或改變現有的全文檢索索引時,建立新的語意索引。 您可以使用 Transact-SQL 陳述式或者使用 SQL Server Management Studio 中的 [全文檢索索引精靈] 和其他對話方塊來建立新的語意索引,如本文所述。
建立語意索引
建立語意索引的需求和限制
您可以針對支援全文檢索索引的任何資料庫物件建立索引,包括資料表和索引檢視表。
必須具有下列必要條件,才能啟用特定資料行的語意索引。
資料庫必須具有全文檢索目錄。
資料表必須具有全文檢索索引。
選取的資料行必須參與全文檢索索引。
您可以同時建立並啟用所有這些需求。
您可以針對具有支援全文檢索索引之任何資料類型的資料行建立語意索引。 如需詳細資訊,請參閱 建立及管理全文檢索索引。
您可以指定支援 varbinary(max) 資料行之全文檢索索引的任何文件類型。 如需詳細資訊,請參閱本文的<操作說明:確定可以進行索引的文件類型>。
語意索引會針對您所選取的資料行建立兩種索引類型:主要片語的索引,以及文件相似度的索引。 啟用語意索引時,無法單獨選取其中一種索引類型。 不過,您可以個別查詢這兩個索引。 如需詳細資訊,請參閱 使用語意搜尋找到文件中的主要片語 和 使用語意搜尋尋找相似及相關的文件。
如果未明確指定語意索引的 LCID,則只有主要語言及其相關聯的語言統計資料會用於語意索引。
如果針對語言模型無法使用的資料行指定了語言,索引的建立作業就會失敗並且傳回錯誤訊息。
在沒有全文檢索索引時建立語意索引
當您使用 CREATE FULLTEXT INDEX
陳述式來建立新的全文檢索索引時,可以透過指定 STATISTICAL_SEMANTICS
關鍵字當作資料行定義的一部分,在資料行層級中啟用語意索引。 此外,當您使用 [全文檢索索引精靈] 來建立新的全文檢索索引時,也可以啟用語意索引。
使用 Transact-SQL 建立新的語意索引
可以針對想要建立語意索引的每個資料行呼叫 CREATE FULLTEXT INDEX
陳述式並指定 STATISTICAL_SEMANTICS
。 如需此陳述式之所有選項的詳細資訊,請參閱 CREATE FULLTEXT INDEX (Transact-SQL)。
範例 1:建立唯一索引、全文檢索索引及語意索引
下列範例會建立預設全文檢索目錄 ft
。 範例會針對 HumanResources.JobCandidate
範例資料庫中 AdventureWorks2022
資料表上的 JobCandidateID
資料行建立唯一索引。 這個唯一索引需要做為全文檢索索引的索引鍵資料行。 接著,此範例會針對 Resume
資料行建立全文檢索索引和語意索引。
CREATE FULLTEXT CATALOG ft AS DEFAULT
GO
CREATE UNIQUE INDEX ui_ukJobCand
ON HumanResources.JobCandidate(JobCandidateID)
GO
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate
(Resume
Language 1033
Statistical_Semantics
)
KEY INDEX JobCandidateID
WITH STOPLIST = SYSTEM
GO
範例 2:針對許多資料行建立全文檢索和語意索引並延遲索引母體擴展
下列範例會在 documents_catalog
範例資料庫中建立全文檢索目錄 AdventureWorks2022
。 接著,此範例會建立使用這個新目錄的全文檢索索引。 全文檢索索引是針對 Production.Document
資料表的 Title
、DocumentSummary
以及 Document
資料行而建立,而語意索引則只針對 Document
資料行而建立。 此全文檢索索引會使用新建立的全文檢索目錄及現有的唯一索引鍵索引 PK_Document_DocumentID
。 建議在整數資料行 DocumentID
上建立此索引鍵。 此範例會指定英文的 LCID (1033),這是這些資料行中資料的語言。
此範例也會指定關閉變更追蹤,而且不進行母體擴展。 之後在離峰時段,此範例會使用 ALTER FULLTEXT INDEX
陳述式,針對新的索引開始完整母體擴展,並啟用自動變更追蹤。
CREATE FULLTEXT CATALOG documents_catalog
GO
CREATE FULLTEXT INDEX ON Production.Document
(
Title
Language 1033,
DocumentSummary
Language 1033,
Document
TYPE COLUMN FileExtension
Language 1033
Statistical_Semantics
)
KEY INDEX PK_Document_DocumentID
ON documents_catalog
WITH CHANGE_TRACKING OFF, NO POPULATION
GO
之後,在離峰時段擴展索引:
ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO
GO
使用 SQL Server Management Studio 建立新的語意索引
您可以針對想要建立語意索引的每個資料行執行 [全文檢索索引精靈],並在 [選取資料表資料行] 頁面上啟用 [統計語意]。 如需詳細資訊,包含如何啟動 [全文檢索索引精靈] 的相關資訊,請參閱 使用全文檢索索引精靈。
在具有現有全文檢索索引時建立語意索引
當您使用 ALTER FULLTEXT INDEX
陳述式來改變現有的全文檢索索引時,可以加入語意索引。 您也可以使用 SQL Server Management Studio 中的各種對話方塊來加入語意索引。
使用 Transact-SQL 加入語意索引
您可以針對想要加入語意索引的每個資料行,使用下節所述的選項來呼叫 ALTER FULLTEXT INDEX
陳述式。 如需此陳述式之所有選項的詳細資訊,請參閱 ALTER FULLTEXT INDEX (Transact-SQL)。
除非您指定其他選項,否則在呼叫 ALTER
之後,全文檢索和語意索引都會重新擴展。
若只要將全文檢索索引加入資料行,請使用
ADD
語法。若要將全文檢索和語意索引都加入資料行,請搭配使用
ADD
語法與STATISTICAL_SEMANTICS
選項。若要將語意索引加入已啟用全文檢索索引的資料行,請使用
ADD STATISTICAL_SEMANTICS
選項。 在單一ALTER
陳述式中,您只能將語意索引加入至一個資料行。
範例:將語意索引加入至已經具有全文檢索索引的資料行
下列範例會針對 AdventureWorks2022
範例資料庫中的 Production.Document
資料表改變現有的全文檢索索引。 此範例會針對 Production.Document
資料表的 Document
資料行 (已經具有全文檢索索引) 加入語意索引。 此範例會指定不要自動重新擴展索引。
ALTER FULLTEXT INDEX ON Production.Document
ALTER COLUMN Document
ADD Statistical_Semantics
WITH NO POPULATION
GO
使用 SQL Server Management Studio 加入語意索引
您可以在 [全文檢索索引屬性] 對話方塊的 [全文檢索索引資料行] 頁面上變更已啟用語意和全文檢索索引的資料行。 如需詳細資訊,請參閱 管理全文檢索索引。
改變語意索引
改變現有索引的需求和限制
當現有索引的母體擴展正在進行時,無法改變該索引。 如需監視索引母體擴展之進度的詳細資訊,請參閱 管理及監視語意搜尋。
無法在
ALTER FULLTEXT INDEX
陳述式的單一呼叫中,將索引加入至資料行,以及改變或卸除相同資料行的索引。
卸除語意索引
當您使用 ALTER FULLTEXT INDEX
陳述式來改變現有的全文檢索索引時,可以卸除語意索引。 您也可以使用 SQL Server Management Studio 中的各種對話方塊來卸除語意索引。
使用 Transact-SQL 卸除語意索引
若要只從資料行中刪除語意索引,請使用 ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS
選項呼叫 ALTER FULLTEXT INDEX
陳述式。 在單一 ALTER
陳述式中,您可以從多個資料行中卸除索引。
USE database_name;
GO
ALTER FULLTEXT INDEX
ALTER COLUMN column_name
DROP STATISTICAL_SEMANTICS;
GO
若要同時卸除資料行的全文檢索和語意索引,請使用 ALTER FULLTEXT INDEX
選項來呼叫 ALTER COLUMN <column_name> DROP
陳述式。
USE database_name;
GO
ALTER FULLTEXT INDEX
ALTER COLUMN column_name
DROP;
GO
使用 SQL Server Management Studio 來卸除語意索引
您可以在 [全文檢索索引屬性] 對話方塊的 [全文檢索索引資料行] 頁面上變更已啟用語意和全文檢索索引的資料行。 如需詳細資訊,請參閱 管理全文檢索索引。
Requirements and restrictions for dropping a semantic index
無法從資料行中卸除全文檢索索引,而保留語意索引。 語意索引相依於全文檢索索引的文件相似度結果。
在已啟用語意索引的資料表中,當您從最後一個資料行中卸除語意索引時,就無法指定
NO POPULATION
選項。 若要移除先前已建立索引的結果,則需要使用母體擴展循環。
檢查資料庫物件上是否啟用語意搜尋
是否已針對資料庫啟用語意搜尋?
查詢 DATABASEPROPERTYEX (Transact-SQL) 中繼資料函數的 IsFullTextEnabled
屬性。
傳回值 1
表示已針對資料庫啟用全文檢索搜尋和語意搜尋。 傳回值 0
表示它們未啟用。
SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled');
GO
是否已針對資料表啟用語意搜尋?
查詢 OBJECTPROPERTYEX (Transact-SQL) 中繼資料函數的 TableFullTextSemanticExtraction
屬性。
傳回值 1 表示已針對資料表啟用語意搜尋,傳回值 0 表示未啟用此搜尋。
SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')
GO
是否已針對資料行啟用語意搜尋?
若要判斷是否已針對特定資料行啟用語意搜尋:
查詢 COLUMNPROPERTY (Transact-SQL) 中繼資料函數的
StatisticalSemantics
屬性。傳回值 1 表示已針對資料行啟用語意搜尋,傳回值 0 表示未啟用此搜尋。
SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics'); GO
查詢目錄檢視 sys.fulltext_index_columns (Transact-SQL),找出全文檢索索引。
statistical_semantics
資料行中的值 1 表示指定的資料行除了啟用全文檢索索引以外,也啟用了語意索引。SELECT * FROM sys.fulltext_index_columns WHERE object_id = OBJECT_ID('table_name'); GO
在 Management Studio 的物件總管中,以滑鼠右鍵按一下資料行,然後選取 [屬性]。 在 [資料行屬性] 對話方塊的 [一般] 頁面上,檢查 [Statistical Semantics] 屬性的值。
True 值表示指定的資料行除了啟用全文檢索索引以外,也啟用了語意索引。
判斷可建立索引供語意搜尋使用的項目
檢查語意搜尋所支援的語言
支援語意索引的語言比支援全文檢索索引的語言要少。 因此,可能會有可建立索引供全文檢索搜尋,但無法用於語意搜尋的資料行。
查詢目錄檢視 sys.fulltext_semantic_languages (Transact-SQL)。
SELECT * FROM sys.fulltext_semantic_languages;
GO
下列是語意索引所支援的語言。 此清單代表 sys.fulltext_semantic_languages (Transact-SQL) 目錄檢視的輸出 (依據 LCID 排序)。
語言 | LCID |
---|---|
繁體中文 | 1028 |
德文 | 1031 |
英文 (美國) | 1033 |
法文 | 1036 |
義大利文 | 1040 |
巴西文 | 1046 |
俄文 | 1049 |
瑞典文 | 1053 |
簡體中文 | 2052 |
英式英文 | 2057 |
葡萄牙文 | 2070 |
中文 (香港特別行政區、中國) | 2070 |
西班牙文 | 3082 |
中文 (新加坡) | 4100 |
中文 (澳門特別行政區) | 5124 |
注意
如果結果為空,必須下載並安裝語意語言統計資料庫。 如需詳細資訊,請參閱安裝、附加及註冊語意語言統計資料庫。
決定可以進行索引的文件類型
查詢目錄檢視 sys.fulltext_document_types (Transact-SQL)。
如果想要索引的文件類型不在支援的類型清單中,則可能必須尋找、下載並安裝其他篩選。 如需詳細資訊,請參閱 檢視或變更已註冊的篩選條件與文字分隔。
最佳做法:針對全文檢索索引和語意索引建立個別的檔案群組
如果您有磁碟空間配置的顧慮,請考慮針對全文檢索和語意索引建立個別的檔案群組。 語意索引與全文檢索索引會建立在相同的檔案群組中。 完整擴展的語意索引可能會包含大量資料。
問題:針對特定資料行進行搜尋時未傳回結果
您是否針對 Unicode 語言指定了非 Unicode LCID?
您可以針對 LCID 代表只有 Unicode 字詞之語言 (例如俄文 LCID 1049) 的非 Unicode 資料行類型啟用語意索引。 在這種情況下,此資料行的語意索引永遠不會傳回任何結果。