共用方式為


建立 Full-Text 索引時選擇語言

建立全文檢索索引時,您必須指定索引數據行的數據行層級語言。 指定語言的 斷詞工具和字幹分析器 將用於欄位上的全文檢索查詢。 在建立全文檢索索引時,選擇數據行語言時,有幾個考慮事項。 這些考量與文字如何令牌化,然後如何由全文引擎編製索引有關。

備註

若要指定全文檢索索引數據行的數據行層級語言,請在指定數據行時使用 LANGUAGE language_term 子句。 如需詳細資訊,請參閱 CREATE FULLTEXT INDEX (Transact-SQL)ALTER FULLTEXT INDEX (Transact-SQL)。

Full-Text 搜尋中的語言支援

本節提供斷詞工具和字幹分析器的簡介,並討論全文搜尋如何使用欄位層級語言的 LCID。

字詞分隔器和詞幹提取器的簡介

SQL Server 2008 和更新版本包含一個全新的斷詞工具和詞幹分析器系列,這些工具明顯優於之前在 SQL Server 中提供的斷詞工具和詞幹分析器。

備註

Microsoft自然語言群組 (MS NLG) 實作並支援這些新的語言元件。

新的詞分隔工具提供下列優點:

  • 魯棒性 (穩定性或強韌性)

    測試顯示,新的斷詞工具在高壓查詢環境中是強固的。

  • 安全

    SQL Server 預設會啟用新的斷詞工具,這要歸功於語言元件的安全性改進。 強烈建議簽署斷詞工具和篩選等外部元件,以改善 SQL Server 的整體安全性和健全性。 您可以設定全文功能以確認這些元件是否已簽署如下:

    EXEC sp_fulltext_service 'verify_signature';  
    
  • 品質

    斷詞工具已經過重新設計,測試顯示新的斷詞工具提供比先前斷詞工具更好的語意品質。 這會增加召回率。

  • 涵蓋廣泛的語言清單,斷詞工具會隨附於現成的 SQL Server 中,且預設已啟用。

如需取得 SQL Server 包含斷詞工具和詞根分析器的語言清單,請參閱 sys.fulltext_languages(Transact-SQL)。

Full-Text 搜尋如何使用 Column-Level 語言的名稱

建立全文檢索索引時,您必須為每個數據行指定有效的語言名稱。 如果語言名稱有效,但未由 sys.fulltext_languages (Transact-SQL) 目錄檢視傳回,全文搜索會回復為相同語言系列最接近的可用語言名稱,如果有的話。 否則,全文搜尋會回復為中性詞拆分器。 這個備援行為可能會影響召回準確性。 因此,強烈建議您在建立全文檢索索引時,為每個數據行指定有效的可用語言名稱。

備註

LCID 會針對所有符合全文檢索索引的數據類型使用(例如 charnchar)。 如果您將 charvarchartext 類型的列的排序順序設定為與 LCID 所識別的語言不同,則在全文檢索索引和查詢這些列時,仍會使用 LCID。

斷詞

斷詞工具會根據特定語言的單字邊界來進行文字的分詞,以便編製索引。 因此,斷詞行為在不同的語言之間有所不同。 如果您使用一種語言 x 來編制多種語言 {x、y 和 、z} 的索引,某些行為可能會導致非預期的結果。 例如,破折號(-)或逗號(,)可能是斷詞元素,會在某一種語言中被捨棄,但在其他語言中則不會。 也可能很少發生非預期的詞幹行為,因為同一個單字在不同語言中可能會有不同的詞幹方式。 例如,在英文中,文字界限通常是空格符或某種形式的標點符號。 在其他語言中,例如德文、單字或字元可以結合在一起。 因此,您選擇的數據行層級語言應該代表預期的語言會儲存在該數據行的數據列中。

西方語言

針對西方語言系列,如果您不確定哪些語言會儲存在數據行中,或預期會儲存多個語言,一般因應措施是針對可能儲存在數據行中最複雜的語言使用斷詞工具。 例如,您可能會預期將英文、西班牙文和德文內容儲存在單一數據行中。 這三種西方語言擁有非常類似的斷詞模式,德文模式是最複雜的。 因此,這個案例的最好選擇是使用德文斷詞工具,這應該能夠正確處理英文和西班牙文文字。 相反地,由於德文的複合字組,英文斷詞工具可能無法完美地處理德文文字。

請注意,在語言系列中使用最複雜語言的斷詞工具並不保證家庭中每個語言的索引都完美。 在某些極端情況中,即使是最複雜的斷詞工具也可能無法正確處理以其他語言撰寫的文字。

非西方語言

對於非西方語言(如中文、日文、印度文等),基於語言原因,上述因應措施不一定能夠運作。 針對非西方語言,請考慮下列其中一種因應措施:

  • 適用於不同語系的語言

    如果數據行可能包含截然不同的語言,例如西班牙文和日文,請考慮將不同語言的內容儲存在不同的數據行中。 這可讓您針對每個欄使用針對特定語言的分詞工具。 如果您選擇此解決方案,而且在查詢時不知道查詢語言,您可能需要針對這兩個數據行發出查詢,以確保查詢找到正確的數據列或檔。

  • 針對二進位內容(例如 Microsoft Word 文件)

    當索引的內容屬於 binary 類型時,在傳送文字內容至斷詞工具之前,處理文字內容的全文搜索篩選可能會接受二進位檔案中現有的特定語言標記。 在此情況下,在編製索引時,篩選會針對檔或文件的區段發出正確的 LCID。 然後,Full-Text 引擎會呼叫具有該 LCID 的語言斷詞工具。 不過,在編製多語言內容索引之後,建議您確認內容是否已正確建立索引。

  • 純文本內容

    當您的內容是純文字時,您可以將它 xml 轉換成數據類型,並新增語言標記,以指出對應至每個特定檔或檔區段的語言。 不過,若要這樣運作,您需要在進行全文檢索之前了解該語言。

堵塞

當選擇欄位層級語言時,額外需考慮的是詞幹分析。 全文檢索查詢中的詞幹分析是搜尋特定語言中單字所有詞幹(屈折)形式的過程。 當您使用一般斷詞工具來處理數種語言時,字幹分析程式只適用於數據行指定的語言,不適用於數據行中的其他語言。 例如,德詞幹提取器不適用於英文、西班牙文等其他語言。 這可能會影響您的召回率,視您在查詢時間選擇的語言而定。

欄位類型對 Full-Text 搜尋的影響

語言選擇的另一個考慮與數據呈現方式有關。 對於未儲存在數據行中的數據 varbinary(max) ,不會執行任何特殊篩選。 相反地,文字通常會透過斷詞元件 as-is傳遞。

此外,斷詞工具的設計主要是為了處理書面文字。 因此,如果您的文字上有任何類型的標記(例如 HTML),在編製索引和搜尋期間可能不會取得絕佳的語言精確度。 在此情況下,您有兩個選項:慣用的方法是將文字數據儲存在數據行中 varbinary(max) ,並指出其檔類型,以便篩選它。 如果這不是選項,您可以考慮使用中性詞界定器,並盡可能將標記數據(例如 HTML 中的 'br')新增至雜訊字詞清單中。

備註

當您指定中性語言時,語言型詞幹分析不會生效。

在 Full-Text 查詢中指定非預設 Column-Level 語言

根據預設,在 SQL Server 中,全文搜索會使用全文檢索子句中每個數據行所指定的語言來剖析查詢字詞。 若要覆寫此行為,請在查詢時間指定非默認語言。 針對已安裝資源的支持語言,可以在 CONTAINSCONTAINSTABLEFREETEXTFREETEXTTABLE 查詢中使用子句 LANGUAGE language_term,以指定用於查詢詞的斷詞、詞幹、同義詞和停用詞處理的語言。

另請參閱

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
資料類型 (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
設定及管理搜尋的篩選
sp_fulltext_service (Transact-SQL)
sys.fulltext_languages (Transact-SQL)
設定及管理搜尋的斷詞工具與字幹分析器