共用方式為


在 Azure AI 搜尋服務中建立全文檢索查詢

如果您要建置全文搜索查詢,本文會提供設定要求的步驟。 它也引進查詢結構,並說明字段屬性和語言分析器如何影響查詢結果。

必要條件

全文檢索查詢要求的範例

在 Azure AI 搜尋服務中,查詢是針對單一搜尋索引檔集合的唯讀要求,參數會通知查詢執行並塑造回應傳回。

全文檢索查詢是在參數中 search 指定,由字詞、引號括住的片語和運算子所組成。 其他參數會將更多定義新增至要求。

下列 搜尋 POST REST API 呼叫說明使用上述參數的查詢要求。

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
    "search": "NY +view",
    "queryType": "simple",
    "searchMode": "all",
    "searchFields": "HotelName, Description, Address/City, Address/StateProvince, Tags",
    "select": "HotelName, Description, Address/City, Address/StateProvince, Tags",
    "top": "10",
    "count": "true"
}

重點︰

  • search 會提供比對準則,通常是整個詞彙或片語,且不含運算元。 索引架構中屬性為「可搜尋」的任何字段都是此參數的候選專案。

  • queryType 會設定剖析器: simplefull。 默認 的簡單查詢剖析器 最適合進行全文搜索。 完整的 Lucene 查詢剖析器適用於進階查詢建構,例如正則表示式、鄰近搜尋、模糊和通配符搜尋。 您也可以將此參數設定 semantic 為 ,以便查詢 回應上進階語意模型化的語意排名

  • searchMode 會指定比對是以表達式中的「全部」準則(偏向精確度)或「任何」準則(優先召回)為基礎。 預設值為 「any」。。 如果您預期大量使用布爾運算符,這在包含大型文本塊的索引中可能更可能(內容欄位或長描述),請務必使用 參數來測試查詢 searchMode=Any|All ,以評估該設定對布爾搜尋的影響。

  • searchFields 將查詢執行限制為特定的可搜尋欄位。 在開發期間,使用相同的欄位清單進行選取和搜尋會很有説明。 否則,比對可能會以您無法在結果中看到的域值為基礎,從而產生傳回檔原因的不確定性。

用來塑造回應的參數:

  • select 指定要在回應中傳回的欄位。 只有索引中標示為「可擷取」的欄位,才能在 select 語句中使用。

  • top 會傳回指定數目最相符的檔。 在此範例中,只會傳回 10 次點擊。 您可以使用頂端和略過 (未顯示) 來分頁結果。

  • count 會告訴您整個索引中有多少份文件與整體相符,這可超過傳回的專案。

  • orderby 如果您要依值排序結果,例如評等或位置,則會使用 。 否則,預設值是使用相關性分數來排名結果。 欄位必須屬性為「可排序」,才能成為此參數的候選專案。

選擇用戶端

針對早期開發和概念證明測試,請從 Azure 入口網站 或 REST 用戶端開始。 這兩種方法都是互動式的,適用於目標測試,並協助您評估不同屬性的效果,而不需要撰寫任何程序代碼。

若要從應用程式內呼叫搜尋,請使用 適用於 .NET、Java、JavaScript 和 Python 的 Azure SDK 中的 Azure.Document.Search 用戶端連結庫。

在入口網站中,當您開啟索引時,可以使用 [搜尋總管] 搭配索引 JSON 定義並排索引標籤,輕鬆存取字段屬性。 檢查 [欄位] 資料表,以查看在測試查詢時可搜尋、可排序、可篩選和可 Facet 的數據表。

  1. 登入 Azure 入口網站並尋找您的搜尋服務。

  2. 開啟 [索引 ],然後選取索引。

  3. 索引會開啟至 [ 搜尋總管] 索引標籤 ,以便您立即查詢。 切換至 JSON 檢視 以指定查詢語法。

    以下是適用於 Hotels 範例索引的全文搜尋查詢表示式:

       {
           "search": "pool spa +airport",
           "queryType": "simple",
           "searchMode": "any",
           "searchFields": "Description, Tags",
           "select": "HotelName, Description, Tags",
           "top": 10,
           "count": true
       }
    

    下列螢幕快照說明查詢和回應:

    Screenshot of Search Explorer with a full text query.

選擇查詢類型:simple |全

如果您的查詢是全文搜索,則會使用查詢剖析器來處理任何以搜尋字詞和片語傳遞的文字。 Azure AI 搜尋提供兩個查詢剖析器。

  • 簡單剖析器了解 簡單的查詢語法。 此剖析器在自由格式文字查詢中選取為其速度和有效性的預設值。 語法支援詞彙和片語法搜尋的常見搜尋運算元(AND、OR、NOT),以及前置詞(*如西雅圖和海濱的 “sea*” 中所示)。 一般建議先嘗試簡單的剖析器,然後在應用程式需求呼叫更強大的查詢時繼續執行完整剖析器。

  • 新增至要求時queryType=full啟用的完整 Lucene 查詢語法是以 Apache Lucene 剖析器為基礎

完整語法和簡單語法會與同時支援相同前置詞和布爾運算的範圍重疊,但完整語法會提供更多運算符。 完整來說,布爾表達式有更多運算符,以及更多進階查詢的運算符,例如模糊搜尋、通配符搜尋、鄰近搜尋和正則表達式。

選擇查詢方法

搜尋基本上是使用者導向的練習,其中字詞或片語是從搜尋方塊收集,或從頁面上單擊事件收集。 下表摘要說明您可以收集使用者輸入的機制,以及預期的搜尋體驗。

輸入 體驗
搜尋方法 使用者會在搜尋方塊中輸入字詞或片語,其中包含或不含運算元,然後按兩下 [搜尋] 以傳送要求。 搜尋可以搭配相同要求上的篩選使用,但不能與自動完成或建議搭配使用。
自動完成方法 使用者輸入一些字元,並在輸入每個新字元之後起始查詢。 回應是從索引完成的字串。 如果提供的字串有效,使用者就會按下 [搜尋] 將該查詢傳送至服務。
建議方法 與自動完成一樣,會產生一些字元和累加查詢。 回應是相符檔的下拉式清單,通常由幾個唯一或描述性字段表示。 如果任一選取專案有效,用戶會按兩下一個,並傳回相符的檔。
多面向導覽 頁面會顯示可點選的瀏覽連結,或縮小搜尋範圍的階層連結。 多面向導覽結構會根據初始查詢動態撰寫。 例如, search=* 填入由每個可能類別所組成的多面向導覽樹狀結構。 多面向導覽結構是從查詢回應建立,但它也是表示下一個查詢的機制。 n REST API 參考會 facets 記錄為搜尋檔作業的查詢參數,但不需要 參數即可使用它 search
Filter 方法 篩選會與Facet搭配使用,以縮小結果範圍。 您也可以在頁面後面實作篩選,例如使用語言特定欄位來初始化頁面。 在 REST API 參考中, $filter 會記錄為搜尋文件作業的查詢參數,但不需要 參數即可使用它 search

欄位屬性對查詢的影響

如果您熟悉 查詢類型和組合,您可能會記得查詢要求上的參數取決於索引中的欄位屬性。 例如,只有標示為 searchableretrievable 的字段可用於查詢和搜尋結果。 在要求中設定 searchfilterorderby 參數時,您應該檢查屬性以避免非預期的結果。

在旅館範例索引下方的入口網站螢幕快照中,只有最後兩個字段 “LastRenovationDate” 和 “Rating” 為 ,這是sortable在僅限 子句中使用"$orderby"的需求。

Index definition for the hotel sample

如需欄位屬性定義,請參閱建立索引(REST API)。

令牌對查詢的影響

在編制索引期間,搜尋引擎會在字串上使用文字分析器,將查詢時間尋找相符專案的可能性最大化。 字串至少會是小寫的,但視分析器而定,也可能會經歷語調和停止文字移除。 較大的字串或複合字通常會以空格符、連字元或破折號分隔,並以個別標記編製索引。

這裡要帶走的是您認為您的索引包含的內容,以及其實際內容可能不同。 如果查詢未傳回預期的結果,您可以透過 分析文字 (REST API) 來檢查分析器所建立的令牌。 如需令牌化和對查詢影響的詳細資訊,請參閱 具有特殊字元的部分字詞搜尋和模式。

下一步

既然您已進一步了解查詢要求的運作方式,請嘗試下列快速入門以取得實際操作體驗。