分享方式:


sys.dm_fts_parser (Transact-SQL)

適用於:SQL Server

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

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 ,具有下列其中一個值:

區分腔調字...
0 敏感

「咖啡館」和「咖啡館」等字會以相同方式處理。
1 區分

「café」 和 「café」 等字會以不同的方式處理。

注意

若要檢視全文檢索目錄的這個值目前設定,請執行下列 Transact-SQL 語句: SELECT fulltextcatalogproperty('<catalog_name>', 'AccentSensitivity');

傳回的資料表

資料行名稱 資料類型 描述
keyword varbinary(128) 斷詞工具所傳回之指定關鍵字的十六進位標記法。 這個標記法是用來將 關鍵字儲存在全文檢索索引中。 這個值不是人類可讀取的,但有助於將指定的關鍵字與傳回全文檢索索引內容的其他動態管理檢視所傳回的輸出建立關聯,例如 sys.dm_fts_index_keywords sys.dm_fts_index_keywords_by_document

注意: 0xFF 表示表示檔案或資料集結尾的特殊字元。
group_id int 包含整數值,這個值很適合用來區分產生指定字詞的邏輯群組。 例如,' Server AND DB OR FORMSOF(THESAURUS, DB)" ' 會以英文產生下列group_id值:

1:伺服器
2:DB
3:DB
phrase_id int 包含一個整數值,這個值有助於區分替代形式的複合字,例如全文檢索,是由斷詞工具所發出。 有時候,有複合字詞存在('數百萬個'),替代形式是由斷詞工具所發出。 這些替代形式(片語)有時需要區分。

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

1 for multi
1 for million
2 for multimillion
occurrence int 表示剖析結果中每個字詞的順序。 例如,針對片語 「 SQL Server query processor 」 發生,會包含片語中字詞的下列出現值,英文:

1 for SQL
2 for Server
3 for query
4 for processor
special_term nvarchar(4000) 包含斷詞工具所發出之字詞特性的相關資訊,其中一個:

- 完全相符
- 雜訊字
- 句子結尾
- 段落結尾
- 章節結尾
display_term nvarchar(4000) 包含人類可讀取的關鍵字形式。 如同設計來存取全文檢索索引內容的函式,由於反正規化限制,此顯示的字詞可能與原始字詞不同。 不過,它應該足夠精確,可協助您從原始輸入中識別它。
expansion_type int 包含指定詞彙擴充本質的相關資訊,其中一個:

0 = 單字大小寫
2 = 轉折展開
4 = 同義字擴充/取代

例如,假設同義字將執行定義為 的擴充 jog

<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>

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

run with expansion_type = 0
runs with expansion_type = 2
running with expansion_type = 2
ran with expansion_type = 2
jog with expansion_type = 4
source_term nvarchar(4000) 產生或剖析指定字詞的字詞或片語。 例如,上的 '"word breakers" AND stemmers' 查詢會產生下列 英文source_term 值:

word breakers適用于display_termword
word breakers適用于display_termbreakers
stemmers適用于display_termstemmers

備註

sys.dm_fts_parser支援全文檢索述詞的語法和功能,例如 CONTAINS 和 FREETEXT ,以及 CONTAINSTABLE FREETEXTTABLE 等 函式。

使用 Unicode 來剖析特殊字元

當您剖析查詢字串時, sys.dm_fts_parser 除非您將查詢字串指定為 Unicode,否則會使用您所連接的資料庫的定序。 因此,針對包含特殊字元的非 Unicode 字串,例如 ü 或 ç,視資料庫的定序而定,輸出可能會非預期。 若要處理獨立于資料庫定序的查詢字串,請在字串前面加上 N ,也就是 N' query_string '

如需詳細資訊,請參閱 C.顯示 本文稍後包含特殊字元 的字串輸出。

使用sys.dm_fts_parser的時機

sys.dm_fts_parser 對於偵錯目的而言,可能很強大。 某些主要使用案例包括:

  • 若要瞭解指定斷詞工具如何處理指定的輸入

    當查詢傳回非預期的結果時,可能是斷詞工具剖析和中斷資料的方式。 藉由使用 sys.dm_fts_parser ,您可以探索斷詞工具傳遞至全文檢索索引的結果。 此外,您可以看到哪些字詞是停用字詞,這些字詞不會在全文檢索索引中搜尋。 字詞是否為指定語言的停用字詞,取決於它是否位於函式中宣告之stoplist_id 值所 指定的停用字詞清單中。

    區分腔調字旗標可讓您查看斷詞工具剖析輸入的方式,並考慮到其腔調敏感度資訊。

  • 若要瞭解字幹分析器在指定輸入上的運作方式

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

    FORMSOF( INFLECTIONAL, query_term )
    

    結果會告訴您將哪些字詞傳遞至全文檢索索引。

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

    您也可以指定:

    FORMSOF( THESAURUS, query_term )
    

    此查詢的結果會顯示斷詞工具和同義字如何與查詢字詞互動。 您可以看到同義字中的擴充或取代專案,並識別實際針對全文檢索索引發出的結果查詢。

    如果使用者發出下列問題:

    FORMSOF( FREETEXT, query_term )
    

    自動進行變化和同義字功能。

除了上述使用案例之外, sys.dm_fts_parser 還可以大幅瞭解和疑難排解全文檢索查詢的其他許多問題。

權限

需要 CREATE FULLTEXT CATALOG 許可權,以及指定停用字詞表的存取權限。

範例

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);

另請參閱

下一步