共用方式為


sys.dm_fts_parser (Transact-SQL)

傳回將給定斷詞工具同義字停用字詞表組合套用至查詢字串輸入之後的最終 Token 化結果。Token 化結果就相當於指定之查詢字串的全文檢索引擎輸出。

sys.dm_fts_parser 是動態管理函數。

語法

sys.dm_fts_parser('query_string', lcid, stoplist_id, accent_sensitivity)

引數

  • query_string
    您想要剖析的查詢。query_string 可以是 CONTAINS 語法支援的字串鏈結。例如,您可以包含字形變化、同義字和邏輯運算子。

  • lcid
    要用於剖析 query_string 之斷詞工具的地區設定識別碼 (LCID)。

  • stoplist_id
    要由 lcid 所識別之斷詞工具使用的停用字詞表的識別碼 (如果有的話)。stoplist_id 是 int。如果您指定了 'NULL',就不會使用任何停用字詞表。如果您指定了 0,就會使用系統 STOPLIST。

    停用字詞表識別碼在資料庫內是唯一的。若要針對給定資料表的全文檢索索引取得停用字詞表識別碼,請使用 sys.fulltext_indexes 目錄檢視。

  • accent_sensitivity
    可控制全文檢索搜尋是否區分變音符號的布林值。accent_sensitivity 是 bit,具有下列其中一個值:

    是否區分腔調字…

    0

    不區分

    "café" 和 "cafe" 等字會視為完全相同。

    1

    區分

    "café" 和 "cafe" 等字會視為不同。

    [!附註]

    若要針對全文檢索目錄檢視這個值的目前設定,請執行下列 Transact-SQL 陳述式:SELECT fulltextcatalogproperty('catalog_name', 'AccentSensitivity');。

傳回的資料表

資料行名稱

資料類型

描述

關鍵字

varbinary(128)

斷詞工具所傳回之給定關鍵字的十六進位表示法。這個表示法是用來將關鍵字儲存在全文檢索索引中。雖然這個值並非人們可讀取,但是它可用於將給定關鍵字與傳回全文檢索索引內容之其他動態管理檢視所傳回的輸出相關,例如 sys.dm_fts_index_keywordssys.dm_fts_index_keywords_by_document

附註附註
OxFF 代表指出檔案或資料集結尾的特殊字元。

group_id

int

包含可用於區分從中產生給定詞彙之邏輯群組的整數值。例如,'Server AND DB OR FORMSOF(THESAURUS, DB)"' 會使用英文產生下列 group_id 值:

group_iddisplay_term
1Server
2DB
3DB

phrase_id

int

包含可用於區分斷詞工具發出複合字 (例如 full-text) 之替代形式所處情況的整數值。有時候,如果存在複合字 ('multi-million'),斷詞工具就會發出替代形式。這些替代形式 (片語) 有時必須加以區別。

例如,'multi-million' 會使用英文產生下列 phrase_id 值:

phrase_iddisplay_term
1 multi
1 million
2 multimillion

occurrence

int

指出剖析結果中每個詞彙的順序。例如,若為 "SQL Server query processor" 片語,occurrence 就會使用英文針對此片語中的詞彙包含下列 occurrence 值:

occurrencedisplay_term
1 SQL
2 Server
3 query
4 processor

special_term

nvarchar(8000)

包含斷詞工具所發出之詞彙特性的相關資訊,它有下列幾種:

完全相符

非搜尋字

句子的結尾

段落的結尾

章節的結尾

display_term

nvarchar(8000)

包含關鍵字的人們可讀取形式。如同設計成存取全文檢索索引內容的函數,由於非正規化限制,所以這個顯示的詞彙可能不會與原始詞彙完全相同。不過,它的精確程度應該足以協助您從原始輸入中識別出該詞彙。

expansion_type

int

包含給定詞彙之展開本質的相關資訊,它有下列幾種:

0 = 單一字詞大小寫

2 = 字形展開

4 = 同義字展開/取代

例如,假設同義字定義當做 jog 之展開執行的情況:

<expansion>

<sub>run</sub>

<sub>jog</sub>

</expansion>

FORMSOF (FREETEXT, run) 一詞會產生下列輸出:

run 而且 expansion_type=0

runs 而且 expansion_type=2

running 而且 expansion_type=2

ran 而且 expansion_type=2

jog 而且 expansion_type=4

source_term

nvarchar(8000)

從中產生或剖析給定詞彙的詞彙或片語。例如,'"word breakers" AND stemmers' 的查詢會使用英文產生下列 source_term 值:

source_termdisplay_term
斷詞工具word
斷詞工具breakers
字幹分析器字幹分析器

備註

sys.dm_fts_parser 支援全文檢索述詞 (例如 CONTAINSFREETEXT ) 與函數 (例如 CONTAINSTABLEFREETEXTTABLE) 的語法和功能。

使用 Unicode 剖析特殊字元

在剖析查詢字串時,sys.dm_fts_parser 會使用所連接之資料庫的 collation,除非您將查詢字串指定為 Unicode。因此,對於包含 ü 或 ç 之類特殊字元的非 Unicode 字串,輸出可能會是非預期的 (根據資料庫的定序而定)。若要個別地處理資料庫定序的查詢字串,請在字串之前加上 N 前置詞,也就是 N'query_string'。

如需詳細資訊,請參閱本主題稍後的「顯示包含特殊字元之字串的輸出」。

何時使用 sys.dm_fts_parser

sys.dm_fts_parser 對於偵錯用途的功能可能非常強大。某些主要的使用狀況包括:

  • 了解給定的斷詞工具如何處理給定的輸入

    當查詢傳回非預期的結果時,可能的原因就是斷詞工具正在剖析資料和進行斷詞。透過使用 sys.dm_fts_parser,您就可以探索斷詞工具傳遞給全文檢索索引的結果。此外,您可以查看哪些詞彙是不會在全文檢索索引中搜尋的停用字詞。某個詞彙是否為給定語言的停用字詞完全取決於它是否位於函數中宣告之 stoplist_id 值所指定的停用字詞表中。

    此外,請注意區分腔調字旗標,這個旗標會允許使用者查看斷詞工具如何在記住區分腔調字資訊時剖析輸入。

  • 了解字幹分析器如何針對給定的輸入運作

    您可以透過指定包含下列 FORMSOF 子句的 CONTAINS 或 CONTAINSTABLE 查詢,了解斷詞工具和字幹分析器如何剖析查詢詞彙及其字幹形式:

    FORMSOF( INFLECTIONAL, query_term )
    

    結果將會告知您哪些詞彙正傳遞給全文檢索索引。

  • 了解同義字如何展開或取代所有或部分輸入

    您也可以指定:

    FORMSOF( THESAURUS, query_term )
    

    這項查詢的結果將顯示斷詞工具和同義字如何針對查詢詞彙互動。您可以從同義字中查看展開或取代,而且可以識別實際針對全文檢索索引發出的結果查詢。

    請注意,如果使用者發出:

    FORMSOF( FREETEXT, query_term )
    

    字形和同義字功能就會自動生效。

除了上述使用狀況以外,sys.dm_fts_parser 可以有效地協助您了解並疑難排解全文檢索查詢的許多其他問題。

權限

需要系統管理員 (sysadmin) 固定伺服器角色中的成員資格以及指定之停用字詞表的存取權限。

範例

A. 針對關鍵字或片語顯示給定斷詞工具的輸出

下列範例會傳回使用英文斷詞工具 (其 LCID 為 1033) 的輸出,但是不會傳回下列查詢字串的停用字詞表:

The Microsoft business analysis

區分腔調字已停用。

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis" ', 1033, 0, 0)

B. 在停用字詞表篩選的內容中顯示給定斷詞工具的輸出

下列範例會傳回使用英文斷詞工具 (其 LCID 為 1033) 的輸出,以及下列查詢字串的英文停用字詞表 (其識別碼為 77):

"The Microsoft business analysis" OR "MS revenue"

區分腔調字已停用。

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis"  OR " MS revenue" ', 1033, 77, 0)

C. 顯示包含特殊字元之字串的輸出

下列範例使用 Unicode 剖析下列的法文字串:

français

此範例為法文指定 LCID 1036,以及使用者定義停用字詞表的識別碼 5。區分腔調字已啟用。

SELECT * FROM sys.dm_fts_parser(N'français', 1036, 5, 1);