在 Azure 認知搜尋 中查詢

Azure 認知搜尋提供豐富的查詢語言,以支援各種案例,從自由文字搜尋到高度指定的查詢模式。 本文說明查詢要求,以及您可以建立的查詢種類。

在認知搜尋中,查詢是往返 search 作業的完整規格,參數可通知查詢執行並塑造傳回的回應。 下列查詢範例會 呼叫搜尋檔 (REST API) 。 它是以 hotels-sample-index 檔集合為目標的布林運算子參數化自由文字查詢。

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

查詢執行期間所使用的參數包括:

  • queryType 會設定剖析器,這通常是 預設的簡單查詢剖析器 , (最適合全文檢索搜尋) 。 您也可以將它設定為 完整的 Lucene 查詢剖析器 ,以進行進階查詢建構,例如正則運算式、鄰近搜尋、模糊和萬用字元搜尋。 或者,如果您想要查詢回應上的進階語意模型化,您可以將它設定為 語意搜尋

  • searchMode 指定比對是否以運算式中的 「all」 準則或 「any」 準則為基礎。 預設值為 「any」。

  • search 提供比對準則,通常是整個字詞或片語,包含或不含運算子。 在索引架構中屬性為 可搜尋 的任何欄位,都是此參數的候選項目。

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

用來塑造回應的參數:

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

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

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

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

上述清單具有代表性,但並非詳盡。 如需查詢要求上參數的完整清單,請參閱 搜尋檔 (REST API)

查詢類型

有一些值得注意的例外狀況,查詢要求會在任意數目的搜尋檔中,逐一查看結構化快速掃描的反向索引,其中可能在任何欄位中找到相符專案。 在認知搜尋中,尋找相符專案的主要方法是全文檢索搜尋或篩選準則,但您也可以實作其他已知的搜尋體驗,例如自動完成或地理位置搜尋。 本文的其餘部分摘要說明認知搜尋中的查詢,並提供詳細資訊和範例的連結。

如果您的搜尋應用程式包含收集字詞輸入的搜尋方塊,則全文檢索搜尋可能是支援該體驗的查詢作業。 全文檢索搜尋會接受在索引中所有可搜尋欄位的參數中 search 傳遞的字詞或片語。 查詢字串中的選擇性布林運算子可以指定包含或排除準則。 簡單剖析器和完整剖析器都支援全文檢索搜尋。

在認知搜尋中,全文檢索搜尋是以 Apache Lucene 查詢引擎為基礎。 全文檢索搜尋中的查詢字串會進行語彙分析,讓掃描更有效率。 分析包含較低大小寫的所有字詞、移除 「the」 等停用字詞,以及將字詞縮減為基本根表單。 預設分析器為 Standard Lucene。

找到比對字詞時,查詢引擎會使用檔索引鍵或識別碼重新建立包含相符專案的搜尋檔來組合域值、依相關性順序排序檔,並在回應中預設) 傳回前 50 個 (,如果您指定 top ,則傳回前 50 個 (。

如果您要實作全文檢索搜尋,請瞭解您的內容如何標記化,可協助您偵錯任何查詢異常狀況。 透過斷字字串或特殊字元的查詢可能需要使用預設標準 Lucene 以外的分析器,以確保索引包含正確的權杖。 您可以使用 語言分析器 或修改語彙分析 的特殊分析器 覆寫預設值。 其中一個範例是 關鍵字 ,會將欄位的整個內容視為單一標記。 這適合用於郵遞區號、識別碼和產品名稱等資料。 如需詳細資訊,請參閱 部分字詞搜尋和具有特殊字元的模式

如果您預期大量使用布林運算子,這在包含大型文字區塊的索引中較可能 (內容欄位或長描述) ,請務必使用 參數測試查詢 searchMode=Any|All ,以評估該設定對布林搜尋的影響。

自動完成和建議的查詢

自動完成或建議的結果 是替代 search 方法,其會根據部分字串輸入引發後續查詢要求, (在每個字元之後) 搜尋即用類型體驗。 如教學課程所述,您可以 autocomplete 同時使用 和 suggestions 參數,但不能搭配 search 使用。 已完成的詞彙和建議查詢都是衍生自索引內容。 引擎永遠不會傳回索引中不存在的字串或建議。 如需詳細資訊,請參閱 自動完成 (REST API) 和建議 (REST API)

篩選準則廣泛使用於包含認知搜尋的應用程式中。 在應用程式頁面上,篩選通常會視覺化為連結導覽結構中的 Facet,以供使用者導向篩選使用。 篩選也會在內部用來公開已編制索引內容的配量。 例如,您可以使用產品類別的篩選來初始化搜尋頁面,或者如果索引包含英文和法文的欄位,則為語言。

您可能也需要篩選準則來叫用特殊查詢表單,如下表所述。 您可以使用篩選準則搭配未指定的搜尋 (search=*) 或包含字詞、片語、運算子和模式的查詢字串。

篩選案例 描述
範圍篩選 在Azure 認知搜尋中,會使用篩選參數來建置範圍查詢。 如需詳細資訊和範例,請參閱 範圍篩選範例
多面向導覽 多面向導覽 樹狀目錄中,使用者可以選取 Facet。 依篩選準則支援時,搜尋結果會依每個點選縮小。 每個 Facet 都是由篩選準則所支援,可排除不再符合 Facet 所提供準則的檔。

注意

在查詢處理期間,不會分析篩選運算式中使用的文字。 文字輸入假設為相符專案成功或失敗的逐字區分大小寫字元模式。 篩選運算式是使用OData 語法建構,並在索引中所有可篩選欄位的參數中 filter 傳遞。 如需詳細資訊,請參閱Azure 認知搜尋 中的篩選

地理空間搜尋會比對位置的緯度和經度座標,以「尋找接近我」或地圖式搜尋體驗。 在 Azure 認知搜尋中,您可以遵循下列步驟來實作地理空間搜尋:

如需詳細資訊和範例,請參閱 地理空間搜尋範例

檔查閱

相較于先前所述的查詢表單,此表單 會依識別碼擷取單一搜尋檔,而沒有對應的索引搜尋或掃描。 只會要求並傳回一份檔。 當使用者在搜尋結果中選取專案時,擷取檔並以欄位填入詳細資料頁面是典型的回應,而檔查閱則是支援的作業。

進階搜尋:模糊、萬用字元、鄰近性、RegEx

進階查詢表單取決於觸發特定查詢行為的 Full Lucene 剖析器和運算子。

查詢類型 使用方式 範例和詳細資訊
欄位搜尋 search 參數 queryType=full 建置以單一欄位為目標的複合查詢運算式。
欄位搜尋範例
模糊搜尋 search 參數 queryType=full 比對具有類似建構或拼法的字詞。
模糊搜尋範例
鄰近搜尋 search 參數 queryType=full 尋找文件中彼此相近的字詞。
鄰近搜尋範例
詞彙提升 search 參數 queryType=full 如果文件包含已提升的字詞 (相較於其他未提升的字詞),則將文件的順位提高。
字詞提升範例
正則運算式搜尋 search 參數 queryType=full 根據規則運算式的內容來比對。
規則運算式範例
萬用字元或首碼搜尋 search 參數含 * ~?queryType=full 根據首碼和波狀符號 (~) 或單一字元 (?) 來比對。
萬用字元搜尋範例

下一步

如需深入瞭解查詢實作,請檢閱每個語法的範例。 如果您不熟悉全文檢索搜尋,請進一步瞭解查詢引擎的用途可能是同樣理想的選擇。