共用方式為


在查詢中設定自動完成和建議的建議工具

在 Azure AI 搜尋中,typeahead 或 “search-as-you-type” 是使用 建議工具啟用。 建議工具是索引中的組態,指定應該使用哪些欄位來填入自動完成和建議的相符專案。 這些欄位會額外進行 Token 化,產生前置詞序列以支援部分字詞比對功能。 例如,包含city值為 Seattle 之字段的建議工具具有支援 typeahead 的前置詞組合,包括 seaseatt seattl

部分字詞比對可以是自動完成的查詢或建議的相符項目。 一個建議工具同時支援這兩種體驗。

Typeahead 可以使用 自動完成,以完成整個字詞查詢的部分輸入,或 邀請點擊到特定相符項目的建議 。 自動完成會產生查詢。 建議會產生相符文件。

以下螢幕擷取畫面說明這兩者。 自動完成預期有一個潛在的字詞,完成 twin。 建議是迷你搜尋結果,其中類似的 hotel name 欄位代表索引中的相符旅館搜尋檔。 若使用建議功能,您可以呈現任何提供描述性資訊的欄位。

顯示自動完成和建議查詢視覺效果比較的螢幕快照。

您可以單獨或一起使用這些功能。 為了在 Azure AI 搜尋服務中實作這些行為,需有索引和查詢元件。

針對字串欄位,根據每個欄位啟用在輸入期間進行搜尋。 如果您想要類似螢幕擷取畫面中所指出的體驗,可以在同一個搜尋解決方案內實作這兩種預先輸入行為。 這兩個要求都會以特定索引的檔集合為目標,而回應會在使用者提供至少三個字元的輸入字串之後傳回。

如何建立建議工具

若要建立建議工具,請將建議工具新增至索引定義。 建議工具會採用一個名稱和一個欄位集合,以此為基礎啟用預先輸入體驗。 當您也定義了使用建議工具的欄位時,是建立建議工具的最佳時機。

  • 僅限使用字串欄位。

  • 如果字串欄位是複雜類型的一部分(例如 Address 中的 City 欄位),請在欄位路徑中包含父代: "Address/City" (REST、C#和 Python),或 ["Address"]["City"] (JavaScript)。

  • 對欄位使用預設標準 Lucene 分析器 ("analyzer": null) 或語言分析器 (例如 "analyzer": "en.Microsoft")。

如果您嘗試使用預先存在的字段建立建議工具,API 會不允許它。 前置詞會在編製索引期間產生,兩個或多個字元組合中的部分字詞會與整個詞彙一起 Token 化。 假設現有的欄位已經 Token 化,如果您想將這些欄位新增至建議工具,則必須重建索引。 如需詳細資訊,請參閱 在 Azure AI 搜尋服務中更新或重建索引。

選擇欄位

雖然建議工具有多項屬性,但主要是您啟用在輸入期間進行搜尋體驗的字串欄位集合。 每個索引都有一個建議工具,因此建議工具清單必須包含組成建議和自動完成內容的所有欄位。

若有較大欄位集區可提取內容,自動完成的成效會提高,因為額外的內容會帶來較高的字詞完成可能性。

另一方面,若您的欄位可供選擇,建議會產生更好的結果。 請記得,建議是搜尋文件的 Proxy,因此挑選最能代表單一結果的欄位。 能區分多個相符項目的名稱、標題或其他唯一欄位最為適合。 如果欄位是由重複的值所組成,建議便會包含相同的結果,讓使用者不知道要選擇哪一個結果。

若要滿足這兩種在輸入期間進行搜尋的體驗,請新增自動完成功能所需的所有欄位,然後使用 selecttopfiltersearchFields 來控制建議的結果。

選擇分析器

您選擇的分析器會決定欄位如何權杖化和加上前置詞。 例如,對於上下文相關等連字元字串,使用語言分析器會導致這些令牌組合:內容敏感性上下文相關 如果您使用標準 Lucene 分析器,連字號字串就不會存在。

評估分析器時,可考慮使用分析文字 API 來深入瞭解字詞的處理方式。 建置索引之後,您可以對字串嘗試各種分析器來檢視 Token 輸出。

使用自定義分析器或內建分析器的欄位,明確不允許使用標準 Lucene,以防止結果不佳。

注意

如果您需要分析器條件約束的因應措施 (例如若您需要特定查詢案例的關鍵字或 ngram 分析器),您應針對相同的內容使用兩個不同的欄位。 這可讓其中一個字段具有建議工具,而另一個字段則可使用自定義分析器組態進行設定。

使用 Azure 入口網站 建立

使用 [新增索引] 或 [匯入資料] 精靈建立索引時,您可以選擇啟用建議工具:

  1. 在索引定義中,輸入建議工具的名稱。

  2. 在新欄位的每個欄位定義中,選取 [建議工具] 資料行中的複選框。 只有字串欄位提供核取方塊。

如先前所述,選擇的分析器會影響 Token 化和前置詞。 啟用建議工具時,請考慮整個欄位定義。

使用 REST 建立

在 REST API 中,使用 建立索引更新索引來新增建議工具。

{
  "name": "hotels-sample-index",
  "fields": [
    . . .
        {
            "name": "HotelName",
            "type": "Edm.String",
            "facetable": false,
            "filterable": false,
            "key": false,
            "retrievable": true,
            "searchable": true,
            "sortable": false,
            "analyzer": "en.microsoft",
            "indexAnalyzer": null,
            "searchAnalyzer": null,
            "synonymMaps": [],
            "fields": []
        },
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["HotelName"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

使用 .NET 建立

使用 C# 定義 SearchSuggester 物件Suggesters 是 SearchIndex 物件的集合,但只能接受一個項目。 將建議工具新增至索引定義。

private static void CreateIndex(string indexName, SearchIndexClient indexClient)
{
    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);

    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);

    indexClient.CreateOrUpdateIndex(definition);
}

屬性參考

屬性 描述
NAME 在建議工具定義中指定,但也會對自動完成或建議要求呼叫。
sourceFields 在建議工具定義中指定。 索引 (建議內容的來源) 中一或多個欄位的清單。 欄位的類型必須是 Edm.String。 如果在欄位中指定分析器,它必須是列在 LexicalAnalyzerName 結構之具名語彙分析器(而非自定義分析器)。

最佳做法是只指定將內容提供給預期且適當回應的欄位,無論是搜尋列或下拉式清單中的已完成字串。

旅館名稱是很好的候選項目,因為相當精確。 描述和註解等詳細資訊欄位則太過密集。 同樣地,重複的欄位效果較差,例如類別和標籤。 在範例中,我們無論如何都包含 類別 ,以示範您可以包含多個字段。
searchMode 僅限 REST 參數,但也會顯示在入口網站上。 此參數無法用於 .NET SDK。 指出用來搜尋候選片語的策略。 目前唯一支援的模式是 analyzingInfixMatching,目前會比對字詞的開頭內容。

使用建議工具

建議工具用於查詢中。 建立建議工具之後,請呼叫下列其中一個 API,以獲得在輸入期間進行搜尋體驗:

在搜尋應用程式中,用戶端程式碼應使用 jQuery UI Autocomplete 之類的程式庫來收集部分查詢並提供相符項目。 如需這項工作的詳細資訊,請參閱將自動完成或建議結果新增至用戶端程式碼

下列對自動完成 REST API 發出的呼叫說明了 API 使用方式。 此範例有兩個重點。 首先,如同所有查詢,這項作業是針對索引的文件集合執行,且查詢中包含 search 參數,在此情況下會提供部分查詢。 其次,您必須將 suggesterName 新增至要求中。 如果沒有在索引中定義建議工具,對自動完成或建議的呼叫會失敗。

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2024-07-01
{
  "search": "minecraf",
  "suggesterName": "sg"
}

範例指令碼

若要瞭解如何在用戶端應用程式中使用 開放原始碼 建議套件進行部分字詞完成,請參閱探索 .NET 搜尋程序代碼

後續步驟

深入瞭解要求制定。