在 Azure AI 搜尋中建立多種語言的索引

如果您有多種語言的字串,您可以附加 語言分析器 ,以在索引編製和查詢執行期間使用特定語言的語言規則來分析字串。 透過語言分析器,您可以更妥善地處理字元變化、標點符號和文字根表單。

Azure AI 搜尋支援 Microsoft 和 Lucene 分析器。 根據預設,搜尋引擎會使用與語言無關的標準 Lucene。 如果測試指出預設分析器不足,請將它取代為語言分析器。

在 Azure AI 搜尋中,支援多種語言的兩種模式包括:

  • 建立語言特定索引,其中所有英數位元內容都使用相同的語言,而且所有可搜尋的字串字段都會歸結為使用相同的 語言分析器

  • 使用每個欄位的語言特定版本建立混合索引(例如,description_en、description_fr、description_ko),然後在查詢時間將全文搜索限制為只有這些字段。 這種方法適用於只有幾個欄位需要語言變體的案例,例如描述。

本文著重於在混合索引中設定和查詢特定語言欄位的步驟和最佳做法:

  • 定義每個語言變體的字串字段。
  • 在每個欄位上設定語言分析器。
  • 在查詢要求上,將 searchFields 參數設定為特定欄位,然後使用 select 只傳回具有相容內容的欄位。

注意

如果您在擷取產生的增強型模式中使用大型語言模型,您可以設計提示以傳回翻譯的字串。 本文的範圍不足。

必要條件

語言分析適用於 類型Edm.Stringsearchable為 的欄位,以及包含當地語系化文字的欄位。 如果您需要文字翻譯,請檢閱下一節,以查看 AI 擴充是否符合您的需求。

非字串欄位和不可搜尋的字串字位不會進行語彙分析,也不會進行標記化。 相反地,它們會儲存並傳回逐字。

新增文字翻譯

本文假設已存在已翻譯的字串。 如果情況並非如此,您可以將 Azure AI 服務附加至 擴充管線,在編製索引期間叫用文字翻譯。 文字翻譯相依於索引器功能和 Azure AI 服務,但所有設定都是在 Azure AI 搜尋中完成。

若要新增文字翻譯,請遵循下列步驟:

  1. 確認您的內容位於 支持的數據源中。

  2. 建立指向您內容的數據源

  3. 建立包含文字翻譯技能的技能集。

    文字翻譯技能會採用單一字串作為輸入。 如果您有多個字段,可以建立技能集,針對每個欄位呼叫文字翻譯多次。 或者,您可以使用 文字合併技能 ,將多個字段的內容合併成一個長字串。

  4. 建立索引,其中包含翻譯字串的欄位。 本文的大部分內容涵蓋索引設計和字段定義,以編製索引和查詢多語言內容。

  5. 將多區域 Azure AI 服務資源 連結至您的技能集。

  6. 建立並執行索引器,然後套用本文中的指引,只查詢感興趣的欄位。

提示

文字翻譯內建於匯 入數據精靈中。 如果您有 支持的數據源 ,其中包含您想要翻譯的文字,您可以逐步執行精靈,先試用語言偵測和翻譯功能,再撰寫任何程序代碼。

定義不同語言內容的欄位

在 Azure AI 搜尋中,查詢會以單一索引為目標。 想要在單一搜尋體驗中提供特定語言字串的開發人員通常會定義專用欄位來儲存值:一個用於英文字符串的欄位、一個用於法文等。

analyzer欄位定義上的 屬性是用來設定語言分析器。 它用於編製索引和查詢執行。

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

建置和載入索引

中繼步驟是在 制定查詢之前建置和填入索引 。 我們在這裡提到此步驟以取得完整性。 判斷索引可用性的其中一種方法是檢查入口網站中的索引清單。

限制查詢並修剪結果

查詢上的參數可用來將搜尋限制為特定欄位,然後修剪任何字段的結果對您的案例沒有説明。

參數 目的
searchFields 將全文搜索限制為具名字段的清單。
select 修剪回應,只包含您指定的欄位。 根據預設,會傳回所有可擷取的欄位。 參數 select 可讓您選擇要傳回的參數。

指定將搜尋限制為包含法文字串的欄位的目標,您可以使用 searchFields 以該語言包含字串的欄位為目標查詢。

不需要在查詢要求上指定分析器。 欄位定義上的語言分析器會決定查詢執行期間的文字分析。 對於指定多個字段的查詢,每個叫用不同的語言分析器,每個欄位的指派分析器會同時處理字詞或片語。

根據預設,搜尋會傳回標示為可擷取的所有欄位。 因此,您可能會想要排除不符合您想要提供之語言特定搜尋體驗的欄位。 具體而言,如果您將搜尋限制為具有法文字符串的欄位,您可能會想要從結果中排除具有英文字符串的欄位。 select使用查詢參數可讓您控制哪些欄位會傳回給呼叫的應用程式。

REST 中的範例

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
    "search": "animaux acceptés",
    "searchFields": "Tags, Description_fr",
    "select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
    "count": "true"
}

C 中的範例#

private static void RunQueries(SearchClient srchclient)
{
    SearchOptions options;
    SearchResults<Hotel> response;

    options = new SearchOptions()
    {
        IncludeTotalCount = true,
        Filter = "",
        OrderBy = { "" }
    };

    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Description_fr");
    options.SearchFields.Add("Tags");
    options.SearchFields.Add("Description_fr");

    response = srchclient.Search<Hotel>("*", options);
    WriteDocuments(response);
}

提升特定語言欄位

有時候,發出查詢的代理程序語言不為人知,在此情況下,可以同時針對所有字段發出查詢。 您可以使用評分設定檔來定義 特定語言結果的 IA 喜好設定。 在下列範例中,在法文描述中找到的相符專案會相對於其他語言的相符項目評分較高:

  "scoringProfiles": [
    {
      "name": "frenchFirst",
      "text": {
        "weights": { "description_fr": 2 }
      }
    }
  ]

接著,您會在搜尋要求中包含評分配置檔:

POST /indexes/hotels/docs/search?api-version=2023-11-01
{
  "search": "pets allowed",
  "searchFields": "Tags, Description_fr",
  "select": "HotelName, Tags, Description_fr",
  "scoringProfile": "frenchFirst",
  "count": "true"
}

下一步