建立全文檢索索引時選擇語言

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控實例

建立全文索引時,請指定欄位層級語言。 對該欄位執行的全文查詢會使用指定語言的斷詞器與詞幹分析器。 想想 Full-Text 引擎在選擇欄位語言時如何標記並索引你的文字。

注意

若要為全文檢索索引中的資料行指定資料行層級的語言,請在指定該資料行時使用 LANGUAGE <language_term> 子句。 如需詳細資訊,請參閱 CREATE FULLTEXT INDEX 和 ALTER FULLTEXT INDEX。

本節介紹斷詞工具和詞幹分析器,並討論 Full-Text Search 如何使用資料行層級語言的語言代碼識別碼 (LCID)。

斷字元件與詞幹提取器簡介

SQL Server 資料庫引擎包含適用於多種語言的斷詞程式與詞幹分析器,且預設為啟用。 Microsoft 自然語言群組 (NLG) 會實作並支援這些語言元件。 有關支援語言的列表,請參見 sys.fulltext_languages。

外部元件如字斷碼與過濾器應簽署以提升安全性。 若要驗證簽章,請執行下列命令:

EXECUTE sp_fulltext_service 'verify_signature';

全文檢索如何使用資料行層級語言名稱

建立全文索引時,請為每欄指定一個有效的語言名稱。 如果語言名稱有效但 sys.fulltext_languages 目錄檢視無法回傳,Full-Text 搜尋會回退到同一語言家族中最接近的可用語言名稱(如果有的話)。 否則,Full-Text 搜尋會回復至「中性斷詞器」。 為避免此退換行為,請指定一個有效且可用的語言名稱。

注意

系統會針對適用於全文檢索索引的所有資料類型 (例如 char 或 nchar) 使用 LCID。 如果您將 char、 varchar或 text 類型資料行的排序次序設定為與 LCID 所識別之語言不同的語言設定,在全文檢索索引和查詢這些資料行期間,系統仍然會使用 LCID。

斷詞

文字分隔會針對文字分界 (語言特有) 將索引的文字 Token 化。 因此,不同語言的斷詞行為會有所不同。 如果您使用一種語言 , x來索引數種語言 {x、 y和 z},則某些行為可能會導致非預期的結果。 例如,破折號(-)或逗號(,)可能是斷詞元素,在某一種語言中會被捨棄,但在另一種語言中則不會被捨棄。 在極少數情況下,可能會發生非預期的詞幹提取行為,因為同一個詞在不同語言中的詞幹提取結果可能不同。 例如,在英文中,文字分界通常是空白字元或某種形式的標點符號。 在其他語言中,如德語,詞彙或字元可能會合併使用。 因此,您選擇的直欄層級語言應該代表您預期儲存在該直欄列中的語言。

西方語言

針對西語系列語言,如果您不確定哪些語言將儲存在資料行中,或預期會儲存多個語言,一般因應措施是針對資料行中可能儲存的最複雜語言使用斷詞工具。

例如,您可能希望將英語、西班牙語和德語內容存儲在單個列中。 這三種西方語言具有相似的斷詞模式,其中德語模式最為複雜。 因此,在這種情況下,一個不錯的選擇是使用德語詞語分解器,它能正確處理英文和西班牙文。 相較之下,英文斷詞工具可能無法完美地處理德文的文字,因為德文含有複合字。

使用語系中最複雜語言的斷詞器並不能保證語系中每種語言的完美索引。 可能存在最複雜的斷詞工具無法正確處理以另一種語言編寫的文字的極端情況。

非西方語言

對於非西方語言(如中文、日文、印地語等),上述解決方法因語言原因不一定有效。 對於非西方語言,請考慮以下其中一種變通方法:

  • 來自不同語系的語言

    如果資料行可能包含完全不同的語言 (例如,西班牙文和日文),請考慮將不同語言的內容儲存在個別的資料行中。 這種分隔讓你能在每欄使用語言特定的分隔詞。 如果您選擇這種解決方案,但是不知道查詢時所使用的查詢語言,可能就必須針對這兩個資料行發出查詢,以便確保查詢會尋找正確的資料列或文件。

  • 用於二進位內容(例如 Microsoft Word 文件)

    當索引的內容屬於 二進位 類型時,全文檢索篩選器在將文字內容送交斷字程式之前進行處理時,可能會遵循二進位檔案中的特定語言標籤。 在此情況下,在編製索引時,篩選會針對文件或文件區段發出正確的 LCID。 接著,全文檢索引擎會呼叫該 LCID 對應語言的斷詞工具。 然而,在索引多語言內容後,請確認內容是否正確被索引。

  • 純文字內容

    當您的內容是純文字時,您可以將其轉換成 xml 資料類型,並加入語言標記,以便表示對應至每份特定文件或文件區段的語言。 不過,若要讓此解決方法有用,您必須在建立全文檢索索引之前,了解所使用的語言。

詞幹提取

選擇資料行層級語言時,另一項考量是 詞幹分析。 全文檢索查詢中的詞幹分析,是指在特定語言中搜尋某個詞的所有詞幹化(屈折變化)形式的過程。 當您使用通用斷詞工具處理多種語言時,詞幹處理程序只會對該資料行所指定的語言生效,而不會對該資料行中的其他語言生效。 例如,德文詞幹提取器不適用於英文或西班牙文(以及其他語言)。 這種行為可能會根據你查詢時選擇的語言,影響你的回憶能力。

選擇語言時的另一個考量與呈現資料的方式有關。 對於未儲存在 varbinary(max) 資料行中的資料,不會執行特殊篩選。 而是,文字通常會以原樣傳遞至斷詞元件。

此外,斷詞工具主要是為了處理書面文字而設計的。 若文字包含標記(如 HTML),索引與搜尋時的語言準確性可能會降低。 在這種情況下,你有兩個選擇:首選方法是將文字資料儲存在 varbinary(max) 欄位,並標示其文件類型以便被過濾。 如果該作法不可行,可以考慮使用中性斷字器,並在可行的情況下,將標記資訊(例如 HTML 中的「br」標記)加入雜訊詞清單。

注意

當您指定中性語言時,將不會套用以語言為基礎的詞幹分析。

在全文查詢中指定非預設的欄位層級語言

預設情況下,資料庫引擎 中 Full-Text 搜尋會依全文子句中每欄指定的語言來解析查詢詞。 若要覆寫此行為,請在查詢時指定非預設語言。 對於已安裝其資源的支援語言,LANGUAGE <language_term>、CONTAINSTABLE、FREETEXT 或 FREETEXTTABLE 查詢的 子句可用來指定查詢詞彙在斷詞、詞幹分析、同義字典及停用詞處理時所使用的語言。