共用方式為


FREETEXTTABLE (Transact-SQL)

這是 Transact-SQL SELECT 陳述式的 FROM 子句中使用的函數,可在包含以字元為基礎之資料類型的全文檢索索引資料行上執行 SQL Server 全文檢索搜尋。 針對其值符合指定的 freetext_string 中的文字意義,但字面不一定完全吻合的資料行,這個函數傳回含有零個、一個或多個資料列的資料表。 FREETEXTTABLE 參考方式就如同一般資料表名稱一樣。

FREETEXTTABLE 與 FREETEXT (Transact-SQL)一樣適用於相同的比對類型。

使用 FREETEXTTABLE 的查詢會針對每個資料列傳回一個相關次序值 (RANK) 和全文檢索索引鍵 (KEY),如下所示:

注意

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

適用於:SQL Server (SQL Server 2008 至目前版本)。

主題連結圖示 Transact-SQL 語法慣例

語法

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

引數

  • table
    這是已標示全文檢索查詢的資料表名稱。 table 或 view可以是一部分、兩部分或三部分資料庫物件名稱。 當查詢檢視時,只能包含一個全文檢索索引基底資料表。

    table 不能指定伺服器名稱,也不能用在連結伺服器的查詢中。

  • column_name
    這是在 FROM 子句中指定之資料表一個或多個全文檢索索引資料行的名稱。 資料行的類型可以是 char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(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 就會傳回錯誤。 若要使用中性語言資源,請在 language_term 中指定 0x0。

  • top_n_by_rank
    指定依遞減順序,只傳回 n個最高等級的相符項目。 它只適用於指定整數值 n 時。 如果結合 top_n_by_rank 與其他參數,則查詢所傳回的資料列數會少於實際相符所有述詞的資料列數。 top_n_by_rank 允許您只重新呼叫最相關的叫用數以提升查詢效能。

備註

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

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

如同 CONTAINSTABLE,傳回的資料表會有名稱為 KEYRANK 的資料行,查詢會參考它們,以取得適當的資料列以及使用資料列次序值。

權限

使用者必須具備指定的資料表或資料表中被參考的資料行之適當 SELECT 權限,才能叫用 FREETEXTTABLE。

範例

A.在 INNER JOIN 中使用 FREETEXT

下列範例會傳回與 sweet、candy、bread、dry 或 meat 相關的所有類別目錄的類別目錄名稱和描述。

USE AdventureWorks2012;
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

B.指定語言和最高等級的相符項目

下列是相同的範例,而且會示範使用 LANGUAGE language_term 和 top_n_by_rank 等參數。

USE AdventureWorks2012;
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 language_term 參數不需要使用 top_n_by_rank 參數。

請參閱

工作

建立全文檢索搜尋查詢 (Visual Database Tools)

參考

CREATE FULLTEXT CATALOG (Transact-SQL)

CREATE FULLTEXT INDEX (Transact-SQL)

CONTAINS (Transact-SQL)

CONTAINSTABLE (Transact-SQL)

FREETEXT (Transact-SQL)

資料列集函數 (Transact-SQL)

SELECT (Transact-SQL)

WHERE (Transact-SQL)

概念

全文檢索搜尋使用者入門

建立及管理全文檢索目錄

建立及管理全文檢索索引

使用全文檢索搜尋進行查詢

預先計算次序伺服器組態選項