2016-12-20

Azure Search - Part 8 ( 使用 .NET SDK 查詢 Azure Search Index)

在完成前置作業(1. 申請 Azure Search 2. 建立 Azure Search Index 2. 建立 index 資料)後,終於可以開始實際使用,查詢方式目前有三個:1. Azure Portal 2. .NET SDK 3.REST API,今天就直接來看 .NET SDK 如何使用.

1. 取得 API Key

Azure Search Service Key

key Type 備註 用途說明
admin keys(系統管理金鑰) 主要/次要 管理服務、建立/刪除 Index、索引子、資料來源;主要/次要用途相同
query keys(查詢金鑰) - 提供 client 端用來讀取 index 與 document

1-1. 登入 Azure Portal

1-2. 開啟 Azure Search

1-3. 點擊 金鑰

1.AZUREKEY

1-4. 取得 主要管理金鑰 或是 次要管理金鑰

  • 兩者皆可用來建立 index

    1-4ADMINKEY

1-5. 取得 查詢金鑰

querykey

2. 建立 SearchIndexClient

  • 用來連線至 Azure Search Index

2-1. nuget 安裝 Microsoft.Azure.Search

Install-Package Microsoft.Azure.Search

2-2. using Microsoft.Azure.SearchMicrosoft.Azure.Search.Models

2-3. 建立 SearchIndexClient 執行個體

  • 查詢資料,可以僅用 query key 較安全
string searchServiceName = "SearchServiceName";//填 AzureServiceName
string queryApiKey = "SearchServiceQueryApiKey";//填 query key
SearchIndexClient indexClient = new SearchIndexClient(searchServiceName, "hotels", new SearchCredentials(queryApiKey));

3. 查詢 index

  • 使用 Documents.Search

3-1. 查詢類型

  1. search
  • 在 index 中所有 Searchable 的欄位搜尋 一或多個 字詞
  • 使用 searchText 來傳參數
  • 不需 searchsearchText 使用 *(實際測試:"" 有相同效果)
  1. filter
  • 可在多個 index 中所有 Filterable 欄位做比對
  • 需要完全符合欄位內容,大小寫視為相異
  • SearchParametersFilter 來傳參數
  • 不需 filter 時,Filter 不要設定 或是 不要傳入 SearchParameters

3-2. 查詢範例

  1. 針對 Searchable 欄位內容 search "budget" 取得 "hotelName" 欄位內容

    SearchParameters parameters;// filter 用
    DocumentSearchResult<Hotel> results;
    
    parameters =
        new SearchParameters()
        {
            Select = new[] { "hotelName" }
        };//僅取得 "hotelName"
    
    results = indexClient.Documents.Search<Hotel>("budget", parameters);//在 "Searchable" 的欄位中 search "budget"
    
  2. filter "baseRate" 欄位 小於 150 ,取得 "hotelId", "description" 欄位內容,不 search(* 表不指定條件 search)

    SearchParameters parameters;// filter 用
    DocumentSearchResult<Hotel> results;
    
    parameters =
        new SearchParameters()
        {
            Filter = "baseRate lt 150",// baseRate 小於 150
            Select = new[] { "hotelId", "description" }//取回 "hotelId", "description"
        };
    
    results = indexClient.Documents.Search<Hotel>("*", parameters);// 不需要 search
    
  3. filter 以 "lastRenovationDate" 欄位遞減排序,取回 "hotelName", "lastRenovationDate" 欄位內容,只取前兩筆,不 search(* 表不指定條件 search)

    SearchParameters parameters;// filter 用
    DocumentSearchResult<Hotel> results;
    
    parameters =
    new SearchParameters()
    {
        OrderBy = new[] { "lastRenovationDate desc" },//以 lastRenovationDate 遞減排序
        Select = new[] { "hotelName", "lastRenovationDate" },// 取回 "hotelName", "lastRenovationDate"
        Top = 2//只取前 2 筆
    };
    
    results = indexClient.Documents.Search<Hotel>("*", parameters);//不需要 search
    
  4. 不用 filter,只針對 Searchable 欄位內容 search "motel"

    SearchParameters parameters;// filter 用
    DocumentSearchResult<Hotel> results;
    
    parameters = new SearchParameters();//不用 filter
     results = indexClient.Documents.Search<Hotel>("motel", parameters);// search "motel"
    

經過前面的查詢基本介紹後,觀念套到 .NET SDK 大致上沒什麼落差,操作上相當便利.

參考資料

  1. 使用 .NET SDK 查詢 Azure 搜尋服務索引
  2. Azure-Samples/search-dotnet-getting-started
  3. Principle of least privilege

沒有留言:

張貼留言