FREETEXTTABLE (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

這是 Transact-SQL SELECT 語句 FROM 子句 中用來對包含字元型資料類型之全文檢索索引資料行執行 SQL Server 全文檢索搜尋的函式。 此函式會針對那些資料行傳回零、一或多個資料列的資料表,其中包含符合指定 之freetext_string 中文字的意義,而不只是確切的字組。 FREETEXTTABLE 會參考為一般資料表名稱。

FREETEXTTABLE 適用于與 FREETEXT (Transact-SQL) 相同的相符專案類型,

使用 FREETEXTTABLE 的查詢會針對每個資料列傳回相關性排名值 (RANK) 和全文檢索索引鍵 (KEY)。

注意

如需有關 SQL Server 所支援全文檢索搜尋形式的資訊,請參閱使用全文檢索搜尋進行查詢

Transact-SQL 語法慣例

語法

FREETEXTTABLE (table , { column_name | (column_list) | * }   
          , 'freetext_string'   
     [ , LANGUAGE language_term ]   
     [ , top_n_by_rank ] )  

引數

table
這是標示為全文檢索查詢的資料表名稱。 資料表 檢視 表可以是一部分、兩部分或三部分的資料庫物件名稱。 查詢檢視時,只涉及一個全文檢索索引基表。

table 無法指定伺服器名稱,而且無法在查詢中針對連結的伺服器使用。

column_name
這是在 FROM 子句中指定之資料表一個或多個全文檢索索引資料行的名稱。 資料行可為以下類型:charvarcharncharnvarchartextntextimagexmlvarbinaryvarbinary(max)

column_list
指出您可以指定多個資料行,各資料行用逗號分隔。 column_list 必須括在括號中。 除非已指定 language_term,否則 column_list 之所有資料行的語言都必須相同。

*
指定所有已登錄全文檢索搜尋的資料行都應該用來搜尋指定的 freetext_string。 除非 指定language_term ,否則資料表中所有全文檢索索引資料行的語言必須相同。

freetext_string
這是要在 column_name 中搜尋的文字。 您可以輸入任何文字,其中包括單字、片語或句子。 在全文檢索索引中找到任何詞彙或任何詞彙的各種形式,都會產生相符項目。

不同于 CONTAINS 搜尋條件,其中 AND 是關鍵字,當用於 freetext_string 'and' 一詞時,會被視為非搜尋字詞或 停用字詞 ,且將會捨棄。

不允許使用 WEIGHT、FORMSOF、萬用字元、NEAR 和其他語法。 freetext_string 會經過斷字、進行詞幹分析,然後進行同義字檢查。

LANGUAGE language_term
這是查詢利用其資源來斷詞、分析詞幹,以及移除同義字和停用字詞的語言。 這個參數是選擇性的,可以指定成對應於語言地區設定識別碼 (LCID) 的字串、整數或十六進位值。 如果指定 language_term,系統就會將它所代表的語言套用至搜尋條件的所有項。 如果未指定任何值,就會使用資料行全文檢索語言。

如果不同語言的文件當做二進位大型物件 (BLOB) 一起儲存在單一資料行中,給定文件的地區設定識別碼 (LCID) 會判斷要建立其內容索引所使用的語言。 查詢此種資料行時,指定 LANGUAGE language_term 可以增加完全相符的機率。

當指定為字串時,language_term 會對應到 sys.syslanguages (Transact-SQL) 相容性檢視表中的 alias 資料行值。 字串必須以單引號括住,如 'language_term'。 當指定為整數時,language_term 是用於識別語言的實際 LCID。 當指定為十六進位值時,language_term 是 0x,後面接著 LCID 的十六進位值。 十六進位值不能超出 8 位數,開頭的零也包括在內。

如果這個值是雙位元組字集 (DBCS) 格式,Microsoft SQL Server 會將其轉換成 Unicode。

如果指定的語言無效,或尚未安裝對應於這個語言的資源,SQL Server 就會傳回錯誤。 若要使用中性語言資源,請將 0x0 指定為 language_term

top_n_by_rank
指定只會 傳回 n 個排名最高的相符專案,以遞減順序傳回。 只有在指定整數值 n 時才會套用。 如果結合 top_n_by_rank 與其他參數,則查詢所傳回的資料列數目會少於實際符合所有述詞的資料列數目。 top_n_by_rank 可讓您只叫用最相關的點擊來提升查詢效能。

備註

全文檢索述詞與函數會在 FROM 述詞中隱含的單一資料表上處理。 若要在多個資料表上進行搜尋,請使用 FROM 子句中聯結的資料表,在兩個或多個資料表之產品的結果集上進行搜尋。

FREETEXTTABLE 使用與 FREETEXT 述詞相同的搜尋條件。

如同 CONTAINSTABLE,傳回的資料表具有名為 KEY RANK 的資料行,這些資料行會在查詢中參考,以取得適當的資料列並使用資料列排名值。

權限

FREETEXTTABLE 只能由具有指定資料表或資料表參考資料行適當 SELECT 許可權的使用者叫用。

範例

A. 簡單範例

下列範例會建立並填入兩個數據行的簡單資料表,其中列出 3 個縣及其旗標中的色彩。 它會建立並填入資料表上的全文檢索目錄和索引。 然後會示範 FREETEXTTABLE 語法。

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));  
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);  
INSERT Flags VALUES ('France', 'Blue and White and Red');  
INSERT Flags VALUES ('Italy', 'Green and White and Red');  
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');  
SELECT * FROM Flags;  
GO  
  
CREATE FULLTEXT CATALOG TestFTCat;  
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;  
GO   
  
SELECT * FROM Flags;  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Blue');  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Yellow');  

B. 在 INNER JOIN 中使用 FREETEXT

下列範例會傳回任何產品的描述和排名,其描述與 的意義 high level of performance 相符。

USE AdventureWorks2022;  
GO  
  
SELECT FT_TBL.Description  
    ,KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL   
    INNER JOIN FREETEXTTABLE(Production.ProductDescription,  
    Description,   
    'high level of performance') AS KEY_TBL  
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY RANK DESC;  
GO  

C. 指定語言和排名最高的相符專案

下列範例完全相同,並示範 LANGUAGE 如何使用 language_term top_n_by_rank 參數。

USE AdventureWorks2022;  
GO  
  
SELECT FT_TBL.Description  
    ,KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL   
    INNER JOIN FREETEXTTABLE(Production.ProductDescription,  
    Description,   
    'high level of performance',  
    LANGUAGE N'English', 2) AS KEY_TBL  
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY RANK DESC;  
GO  

注意

語言 language_term 參數不需要使用 top_n_by_rank 參數。

另請參閱

全文檢索搜尋使用者入門
建立及管理全文檢索目錄
CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
建立及管理全文檢索索引
使用全文檢索搜尋查詢
建立全文檢索搜尋查詢 (Visual Database Tools)
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
資料列集函式 (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
預先計算排名伺服器組態選項
比較 Azure SQL Database 和 Azure SQL 受控實例中的功能