sys.dm_fts_parser(Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Microsoft Fabric 中的 SQL 資料庫

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

sys.dm_fts_parser 是動態管理功能。

Syntax

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智力。如果你指定「」NULL,則不會使用停止表。 如果你指定 0,系統 STOPLIST 就會被使用。

停用字詞表標識碼在資料庫中是唯一的。 若要取得指定數據表上全文檢索索引的停用字詞表標識碼,請使用 sys.fulltext_indexes 目錄檢視。

accent_sensitivity

布爾值,可控制全文搜索是否敏感或不區分讀音符號。 accent_sensitivity位,具有下列其中一個值:

價值 區分腔調字...
0 感覺遲鈍的

「咖啡館」和「咖啡館」等字會以相同方式處理。
1 敏感性

“café” 和 “café” 等字會以不同的方式處理。

Note

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

傳回的資料表

欄位名稱 資料類型 Description
keyword 1 varbinary(128) 斷詞工具所傳回之指定關鍵詞的十六進位表示法。 這個表示法是用來將 關鍵詞儲存在全文檢索索引中。 此值無法被人類讀取,但對於將特定關鍵字與其他動態管理檢視(如 sys.dm_fts_index_keywordssys.dm_fts_index_keywords_by_document)回傳的全文索引內容產生關聯時非常有用。
group_id int 包含整數值,這個值很適合用來區分產生指定字詞的邏輯群組。 例如,產生 Server AND DB OR FORMSOF(THESAURUS, DB) 以下 group_id 英文數值:

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

例如,產生 multi-million 以下 phrase_id 英文數值:

1multi
1million
2multimillion
occurrence int 表示剖析結果中每個字詞的順序。 例如,對於短語 SQL Server query processor occurrence,在英文中會包含該片語中詞彙的出現值:

1 表示 SQL
2 表示 Server
3 表示 query
4 代表 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 當 expansion_type = 0
runs 其中 expansion_type = 2
running 其中 expansion_type = 2
ran 其中 expansion_type = 2
jog 其中 expansion_type = 4
source_term nvarchar(4000) 產生或剖析指定字詞的字詞或片語。 例如,上的 '"word breakers" AND stemmers' 查詢會產生下列 英文source_term 值:

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

10xFF 代表表示檔案或資料集結束的特殊字元。

備註

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

使用 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包含以下FORMSOF子句的查詢CONTAINSTABLE,了解斷字者與詞幹者如何解析查詢詞及其詞幹形式:

    FORMSOF ( INFLECTIONAL, <query_term> )
    

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

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

    您也可以指定:

    FORMSOF ( THESAURUS, <query_term> )
    

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

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

    FORMSOF ( FREETEXT, <query_term> )
    

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

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

許可

需要 CREATE FULLTEXT CATALOG 授權及存取指定停止清單的權限。

Examples

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