將語言分析器新增至 Azure AI 搜尋服務引中的字串欄位

「語言分析器」是特定類型的文字分析器,能使用目標語言的語言規則來執行語彙分析。 每個可搜尋的欄位都有 analyzer 屬性。 如果您的內容包含已翻譯的字串 (例如適用於英文和中文文字的個別欄位),您可以在每個欄位上指定語言分析器,以存取由那些分析器所提供的豐富語言功能。

使用語言分析器的時機

當您知道文字或句子結構會增加文字剖析的值時,您應該考慮語言分析器。 常見的範例是不規則的動詞形式,(「bring」和「brought」) 或複數名詞 (「mice」和「mouse」) 的關聯。 如果沒有語言感知,系統會單獨在實體特性上剖析這些字串,而無法注意到連結。 由於大型文字區塊較可能擁有此內容,因此由描述、評論或摘要組成的欄位是語言分析器的良好候選項目。

當內容包含非西歐語言字串時,您也應該考慮語言分析器。 雖然預設分析器 (Standard Lucene) 與語言無關,但使用空格和特殊字元的概念 (連字號和斜線) 來分隔字串,相對於非西歐語言,更適用於西歐語言。

例如,在中文、日文、韓文 (CJK) 和其他亞洲語言中,不需要使用空格作為單字分隔符號。 請考慮下列日文字串。 因為沒有空格,所以語言無關的分析器可能會將整個字串分析為一個標記,事實上該字串其實是片語。

これは私たちの銀河系の中ではもっとも重く明るいクラスの球状星団です。
(This is the heaviest and brightest group of spherical stars in our galaxy.)

在上述範例中,成功的查詢必須包含完整權杖,或使用尾碼萬用字元的部分權杖,因而造成非自然且限制搜尋體驗。

更好的體驗是搜尋個別單字:明るい (Bright)、私たちの (Our),銀河系 (Galaxy)。 使用 Azure AI 搜尋服務中可用的其中一個日文分析器,更可能解除鎖定此行為,因為這些分析器更適合將文字區塊分割成目的語言中有意義的單字。

比較 Lucene 和 Microsoft Analyzers

Azure AI 搜尋服務支援由 Lucene 所支援的 35 種語言分析器,以及由專屬的 Microsoft 自然語言處理技術所支援的 50 種語言分析器 (此技術同樣用於 Office 和 Bing 中)。

一些開發人員可能偏好使用更熟悉、簡單且開放原始碼的 Lucene 解決方案。 Lucene 語言分析器速度較快,但 Microsoft 分析器具備進階功能,例如詞形歸併還原、複合字詞拆分 (適用於德文、丹麥文、荷蘭文、瑞典文、挪威文、愛沙尼亞文、芬蘭文、匈牙利文、斯洛伐克文等語言) 和實體辨識 (URL、電子郵件、日期、數字)。 如果可以,您應該進行 Microsoft 和 Lucene 分析器的比較,以決定哪一個比較適合。 您可以使用分析 API 來查看使用特定分析器從指定文字產生的權杖。

使用 Microsoft 分析器編製索引,平均速度約比其 Lucene 對等項目慢兩到三倍,視語言而定。 平均大小的查詢應不至大幅影響搜尋效能。

英文分析器

預設分析器是標準 Lucene,其可用於英文,但效果較不如 Lucene 的英文分析器或 Microsoft 的英文分析器。

  • Lucene 的英文分析器能擴充標準分析器。 它會從字詞中移除所有格 (結尾的 's)、為每個 Porter 詞幹演算法套用詞幹,然後移除英文停用字詞。

  • Microsoft 的英文分析器會執行詞形的歸併還原,而不是詞幹分析。 這表示其可以把變形和不規則的字詞形式處理得更好,以得到相關性更強的搜尋結果。

如何指定語言分析器

在索引建立期間設定分析器,再載入資料。

  1. 在欄位定義中,請確定欄位屬性為「可搜尋」,且類型為 Edm.String。

  2. 支援的分析器清單中,將 "analyzer" 屬性設定為其中一個語言分析器。

    "analyzer" 屬性是唯一會接受語言分析器的屬性,而且用於編制索引和查詢。 其他分析器相關屬性 ("searchAnalyzer" 和 "indexAnalyzer") 不接受語言分析器。

無法自訂語言分析器。 如果分析器不符合您的需求,請使用 microsoft_language_tokenizer 或 microsoft_language_stemming_tokenizer 建立 自訂分析器,然後新增篩選準則以進行預先和後置權杖化處理。

下列範例說明索引中的語言分析器規格:

{
  "name": "hotels-sample-index",
  "fields": [
    {
      "name": "Description",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "en.microsoft",
      "indexAnalyzer": null,
      "searchAnalyzer": null
    },
    {
      "name": "Description_fr",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "fr.microsoft",
      "indexAnalyzer": null,
      "searchAnalyzer": null
    },

如需建立索引和設定欄位屬性的詳細資訊,請參閱建立索引 (REST)。 如需文字分析的詳細資訊,請參閱 Azure AI 搜尋服務中的分析器

支援的語言分析器

以下是支援的語言清單與 Lucene 和 Microsoft 的分析器名稱。

語言 Microsoft 分析器名稱 Lucene 分析器名稱
阿拉伯文 ar.microsoft ar.lucene
亞美尼亞文 hy.lucene
孟加拉文 bn.microsoft
巴斯克文 eu.lucene
保加利亞文 bg.microsoft bg.lucene
加泰蘭文 ca.microsoft ca.lucene
簡體中文 zh-Hans.microsoft zh-Hans.lucene
繁體中文 zh-Hant.microsoft zh-Hant.lucene
克羅埃西亞文 hr.microsoft
捷克文 cs.microsoft cs.lucene
丹麥文 da.microsoft da.lucene
荷蘭文 nl.microsoft nl.lucene
英語 en.microsoft en.lucene
愛沙尼亞文 et.microsoft
芬蘭文 fi.microsoft fi.lucene
法文 fr.microsoft fr.lucene
加利西亞文 gl.lucene
德文 de.microsoft de.lucene
希臘文 el.microsoft el.lucene
古吉拉特文 gu.microsoft
Hebrew he.microsoft
印度文 hi.microsoft hi.lucene
匈牙利文 hu.microsoft hu.lucene
冰島文 is.microsoft
印尼文 (Bahasa) id.microsoft id.lucene
愛爾蘭文 ga.lucene
義大利文 it.microsoft it.lucene
日文 ja.microsoft ja.lucene
坎那達文 kn.microsoft
韓文 ko.microsoft ko.lucene
拉脫維亞文 lv.microsoft lv.lucene
立陶宛文 lt.microsoft
馬來亞拉姆文 ml.microsoft
馬來文 (拉丁) ms.microsoft
馬拉地文 mr.microsoft
挪威文 nb.microsoft no.lucene
波斯文 fa.lucene
波蘭文 pl.microsoft pl.lucene
葡萄牙文 (巴西) pt-Br.microsoft pt-Br.lucene
葡萄牙文 (葡萄牙) pt-Pt.microsoft pt-Pt.lucene
旁遮普文 pa.microsoft
羅馬尼亞文 ro.microsoft ro.lucene
俄文 ru.microsoft ru.lucene
塞爾維亞文 (斯拉夫) sr-cyrillic.microsoft
塞爾維亞文 (拉丁) sr-latin.microsoft
斯洛伐克文 sk.microsoft
斯洛維尼亞文 sl.microsoft
西班牙文 es.microsoft es.lucene
瑞典文 sv.microsoft sv.lucene
坦米爾文 ta.microsoft
泰盧固文 te.microsoft
泰文 th.microsoft th.lucene
土耳其文 tr.microsoft tr.lucene
烏克蘭文 uk.microsoft
烏都文 ur.microsoft
越南文 vi.microsoft

所有名稱加上 Lucene 註解的分析器都是由 Apache Lucene 的語言分析器 \(英文\) 所提供。

另請參閱