描述如何針對包含文件或文字的選取資料行啟用或停用統計語意索引。
統計語意搜尋會使用 Full-Text 搜尋所建立的索引,並建立其他索引。 由於全文檢索搜尋存在這種相依性,因此您可以在定義新的全文檢索索引或改變現有的全文檢索索引時,建立新的語意索引。 您可以使用 Transact-SQL 語句,或使用 SQL Server Management Studio 中的 Full-Text 索引精靈和其他對話框,來建立新的語意索引,如本主題所述。
建立語意索引
建立語意索引的需求和限制
您可以針對支援全文檢索索引的任何資料庫物件建立索引,包括資料表和索引檢視表。
必須具有下列必要條件,才能啟用特定資料行的語意索引。
資料庫必須具有全文檢索目錄。
資料表必須具有全文檢索索引。
選取的資料行必須參與全文索引。
您可以同時建立並啟用所有這些需求。
您可以針對具有支援全文檢索索引之任何資料類型的資料行建立語意索引。 如需詳細資訊,請參閱 建立及管理全文檢索索引。
您可以為
varbinary(max)資料行指定任何支援全文檢索的檔案類型。 如需詳細資訊,請參閱 如何:判斷本主題中的可編製索引的文件類型 。語意索引會針對您所選取的資料行建立兩種索引類型:主要片語的索引,以及文件相似度的索引。 當您啟用語意索引編製時,不能只選取一種索引或另一種類型。 不過,您可以個別查詢這兩個索引。 如需詳細資訊,請參閱 使用語意搜尋找到文件中的主要片語 和 使用語意搜尋尋找相似及相關的文件。
如果您未明確指定語意索引的 LCID,則只會使用主要語言及其相關聯的語言統計數據進行語意索引編製。
如果您為無法使用語言模型的數據行指定語言,則索引的建立會失敗並傳回錯誤訊息。
如何:在沒有 Full-Text 索引時建立語意索引
當您使用 CREATE FULLTEXT INDEX 語句建立新的全文檢索索引時,您可以將關鍵詞 STATISTICAL_SEMANTICS 指定為數據行定義的一部分,在數據行層級啟用語意索引。 此外,當您使用 [全文檢索索引精靈] 來建立新的全文檢索索引時,也可以啟用語意索引。
使用 Transact-SQL 建立新的語意索引
呼叫 CREATE FULLTEXT INDEX 語句,並針對您要建立語意索引的每個數據行指定 STATISTICAL_SEMANTICS 。 如需此陳述式之所有選項的詳細資訊,請參閱 CREATE FULLTEXT INDEX (Transact-SQL)。
範例 1:建立唯一索引、全文檢索索引和語意索引
下列範例會建立預設全文檢索目錄 ft。 接著,此範例會在 AdventureWorks2012 範例資料庫的 HumanResources.JobCandidate 數據表的 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:在數個欄位上建立全文檢索和語意索引,並延遲索引填入
下列範例會在 AdventureWorks2012 範例資料庫中建立全文檢索目錄 ,documents_catalog。 接著,此範例會建立使用這個新目錄的全文檢索索引。 全文檢索索引是在 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 建立新的語意索引
您可以針對想要建立語意索引的每個資料行執行 [全文檢索索引精靈],並在 [選取資料表資料行] 頁面上啟用 [統計語意]。 如需詳細資訊,包含如何啟動 [全文檢索索引精靈] 的相關資訊,請參閱 使用全文檢索索引精靈。
如何:當有現有的 Full-Text 索引時,建立語意索引
您可以使用 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 語句中的一個數據行。
範例:將語意索引新增至已經有全文檢索索引的數據行
下列範例會改變 AdventureWorks2012 範例資料庫中 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 FULLTEXT INDEX 語句搭配 ALTER COLUMNcolumn_nameDROP STATISTICAL_SEMANTICS 選項。 您可以在單一 ALTER 語句中從多個資料行移除索引。
```sql
USE database_name
GO
ALTER FULLTEXT INDEX
ALTER COLUMN column_name
DROP STATISTICAL_SEMANTICS
GO
```
若要從數據行卸除全文檢索和語意索引,請使用 ALTER COLUMNcolumn_nameDROP 選項呼叫 ALTER FULLTEXT INDEX 語句。
USE database_name GO ALTER FULLTEXT INDEX ALTER COLUMN column_name DROP GO
使用 SQL Server Management Studio 卸除語意索引
您可以在 [全文檢索索引屬性] 對話方塊的 [全文檢索索引資料行] 頁面上變更已啟用語意和全文檢索索引的資料行。 如需詳細資訊,請參閱 管理全文檢索索引。
卸除語意索引的要求和限制
您無法在保留語意索引時,從數據行卸除全文檢索索引。 語義索引依賴於全文索引以獲取文件相似度結果。
當您從已啟用語意索引之數據表的最後一個數據行卸除語意索引時,無法指定 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) |
|---|---|
| 德語 | 1031 |
| 英文 (美國) | 1033 |
| 法語 | 1036 |
| 義大利語 | 1040 |
| 葡萄牙文(巴西) | 1046 |
| 俄語 | 1049 |
| 瑞典文 | 1053 |
| 英文 (英國) | 2057 |
| 葡萄牙文 (葡萄牙) | 2070 |
| 西班牙文 | 3082 |
如何:判斷哪些文件類型可以編製索引
查詢目錄檢視 sys.fulltext_document_types (Transact-SQL)。
如果您想要編制索引的檔案類型不在支援的類型清單中,您可能必須尋找、下載及安裝其他篩選。 如需詳細資訊,請參閱 檢視或變更已註冊的篩選條件與文字分隔。
最佳做法:請考慮為 Full-Text 和語意索引建立個別的檔案群組
如果您有磁碟空間配置的顧慮,請考慮針對全文檢索和語意索引建立個別的檔案群組。 語意索引與全文檢索索引會建立在相同的檔案群組中。 完整擴展的語意索引可能會包含大量資料。
問題:搜尋特定欄位不會傳回任何結果
是否為 Unicode 語言指定了非 Unicode 的 LCID?
您可以針對 LCID 代表只有 Unicode 字詞之語言 (例如俄文 LCID 1049) 的非 Unicode 資料行類型啟用語意索引。 在此情況下,將不會從此數據行的語意索引傳回任何結果。