(Azure AI 搜尋 REST API) 搜尋檔

查詢要求會以搜尋服務上單一索引的檔集合為目標。 其中包含定義比對準則的參數,以及塑造響應的參數。 從 2021-04-30-Preview API 版本開始,您也可以使用 索引別名 來鎖定特定索引,而不是使用索引名稱本身。

您可以使用 GET 或 POST。 查詢參數 是在 GET 要求的查詢字串上指定,以及在 POST 要求的要求本文中指定。

GET https://[service name].search.windows.net/indexes/[index name]/docs?[query parameters] 
  Content-Type: application/json   
  api-key: [admin or query key]  

如果您使用 POST,請將 「搜尋」動作新增為 URI 參數。

POST https://[service name].search.windows.net/indexes/[index name]/docs/search?api-version=[api-version]  
  Content-Type: application/json  
  api-key: [admin or query key]  

使用 GET 呼叫時,要求 URL 的長度不能超過 8 KB。 此長度通常足以用於大部分的應用程式。 不過,某些應用程式會產生大型查詢,特別是使用 OData 篩選表達式時。 針對這些應用程式,HTTP POST 是較佳的選擇,因為它允許比 GET 更大的篩選。

使用 POST 時,限制因素為篩選中的子句數目,而不是原始篩選字串的大小,因為 POST 的要求大小限制約為 16 MB。 即使 POST 要求大小限制很大,篩選表示式也無法任意複雜。 如需篩選複雜性限制的詳細資訊,請參閱 Azure AI 搜尋的 OData 表達式語法

URI 參數

參數 Description
[服務名稱] 必要。 將此設定為搜尋服務的唯一用戶定義名稱。
[索引名稱]/docs 必要。 指定具名索引的檔集合。
[查詢參數] 查詢參數是在 GET 要求的 URI 上指定,以及在 POST 要求的要求本文中指定。
api-version 必要。 目前的穩定版本是 api-version=2020-06-30。 如需更多版本,請參閱 API 版本 。 針對查詢,api-version 一律會指定為 GET 和 POST 的 URI 參數。

URL 編碼建議

直接呼叫 GET REST API 時,請記得 URL 編碼 特定的查詢參數。 針對 搜尋檔 作業,下列查詢參數可能需要 URL 編碼:

  • 搜尋
  • $filter
  • facet
  • highlightPreTag
  • highlightPostTag

建議只針對個別參數使用 URL 編碼。 如果您不小心 URL 編碼整個查詢字串 (? 之後的所有內容),要求將會中斷。

此外,只有在使用 GET 直接呼叫 REST API 時,才需要進行 URL 編碼。 使用 POST 或使用 Azure AI 搜尋服務 .NET 用戶端連結庫時,不需要 URL 編碼,這會為您處理編碼。

要求標頭

下表說明必要及選用的要求標頭。

欄位 Description
Content-Type 必要。 將此設定為 “application/json”
api-key 如果您使用 Azure 角色 ,並在要求上提供持有人令牌,則為選擇性,否則需要密鑰。 API 金鑰是唯一的系統產生字串,可驗證對搜尋服務的要求。 針對檔集合的查詢要求可以指定 admin-key 或 query-key 作為 API 密鑰。 查詢索引鍵用於對檔集合進行唯讀作業。 如需詳細資訊,請參閱 使用密鑰驗證連線到 Azure AI 搜尋 服務。

要求本文

針對 GET:None。

針對 POST:

{  
     "count": true | false (default),  
     "facets": [ "facet_expression_1", "facet_expression_2", ... ],  
     "filter": "odata_filter_expression",  
     "highlight": "highlight_field_1, highlight_field_2, ...",  
     "highlightPreTag": "pre_tag",  
     "highlightPostTag": "post_tag",  
     "minimumCoverage": # (% of index that must be covered to declare query successful; default 100),  
     "orderby": "orderby_expression",  
     "queryType": "simple" (default) | "full",
     "scoringParameters": [ "scoring_parameter_1", "scoring_parameter_2", ... ],  
     "scoringProfile": "scoring_profile_name",  
     "scoringStatistics" : "local" | "global",
     "search": "simple_query_expression",  
     "searchFields": "field_name_1, field_name_2, ...",  
     "searchMode": "any" (default) | "all",  
     "select": "field_name_1, field_name_2, ...",  
     "sessionId" : "session_id",
     "skip": # (default 0),  
     "top": #  
   }  

接續部分搜尋回應

有時候 Azure AI 搜尋服務無法在單一搜尋回應中傳回所有要求的結果。 發生這種情形的原因有很多,例如未指定 $top 或指定的 $top 值太大以致查詢要求太多文件時。 在這種情況下,Azure AI 搜尋會在 @odata.nextLink 回應本文中包含批注,如果它是 POST 要求,也會 @search.nextPageParameters 包含批注。 您可以使用這些註解的值來制定另一個搜尋要求,以取得搜尋回應的下一個部分。 這稱為原始搜尋要求的「接續」,而註解通常稱為「接續語彙基元」。 如需這些批註語法的詳細數據,以及這些批註出現在回應本文中的位置,請參閱下列回應中的範例。

Azure AI 搜尋服務可能會傳回接續令牌的原因為實作特定且可能會變更。 穩健的用戶端應可隨時處理傳回的文件少於預期的情況,而且會包含接續語彙基元以便繼續擷取文件。 也請注意,您必須使用與原始要求相同的 HTTP 方法才能繼續。 例如,如果您傳送 GET 要求,則您傳送的所有接續要求也必須使用 GET (同樣適用於 POST)。

注意

@odata.nextLink和 @search.nextPageParameters 的目的是保護服務免於要求太多結果的查詢,而不是提供分頁的一般機制。 如果您要逐頁檢視結果,請同時使用 $top$skip 。 例如,如果您想要大小為10的頁面,則您的第一個要求應該有 $top=10$skip=0,第二個要求應該有 $top=10 和 ,第三個要求應該有 $top=10$skip=10$skip=20等等。

查詢參數

使用 GET 呼叫 URL 時,查詢會接受 URL 上的數個參數,並在使用 POST 呼叫時作為要求本文中的 JSON 屬性。 GET 和 POST 之間某些參數的語法稍有不同。 這些差異如下所述。

名稱 類型 描述
api-version 字串 必要。 用於要求的 REST API 版本。 如需支援的版本清單,請參閱 API 版本。 針對這項作業,不論您是否使用 GET 或 POST 呼叫 搜尋檔 ,api-version 都會指定為 URI 參數。
$count boolean 選擇性。 有效的值為 "true" 或 "false"。 默認為 「false」。。 使用 POST 呼叫時,這個參數會命名為 count,而不是 $count。 指定是否要提取結果的總計數。 這是符合搜尋和$filter參數的所有文件計數,忽略 $top$skip。 將此值設定為 「true」 可能會降低效能。 如果索引穩定,但會低於或過度報告任何主動新增、更新或刪除的檔,則計數是正確的。 如果您想要只取得不含任何文件的計數,您可以使用 $top=0。
Facet 或 Facet 字串 選擇性。 要進行Facet的欄位,其中字段會以「可Facet」表示。 使用 GET 呼叫 時, facet 是字段 (facet: field1) 。 使用 POST 呼叫時,這個參數會命名 facets 為 ,而不是 facet ,並且指定為陣列 (facets: [field1, field2, field3]) 。 字串可能包含參數來自定義Facet,以逗號分隔的名稱/值組表示。

有效參數為 「count」、“sort”、“values”、“interval” 和 “timeoffset”。

“count” 是 Facet 詞彙的最大數目;預設值為 10。 詞彙數目沒有上限,但較高的值會降低效能,特別是在多面向字段包含大量唯一詞彙時。 例如,“facet=category,count:5” 會取得 Facet 結果中的前五個類別。 如果 count 參數小於唯一字詞的數目,結果可能不正確。 這是因為多面向查詢的方式會散佈於各個分區中。 您可以將 count 設定為零,或設定為大於或等於可 Facet 欄位中唯一值數目的值,以取得所有分區的精確計數。 取捨會增加延遲。

“sort” 可以設定為 “count”、“-count”、“value”、“-value”。 使用 count 依計數排序遞減。 使用 -count 依 count 排序遞增。 使用值依值排序遞增。 使用 -value 依值遞減排序 (例如,“facet=category,count:3,sort:count” 會依每個城市名稱的檔數目遞減順序來取得 facet 中的前三個類別) 。 如果前三個類別是預算、旅館和倫敦,而預算有 5 個點擊數,而「旅館」有 6 個,而「倫敦」有 4 個,則貯體會依「美國預算」、「預算」、「倫敦」的順序排列。 針對 -value,“facet=rating,sort:-value” 會根據 (值遞減產生所有可能評等的值區,例如,如果評分從 1 到 5,則值區會排序為 5、4、3、2、1,而不論每個評等) 相符的檔數目為何。

“values” 可以設定為管線分隔的數值或 Edm.DateTimeOffset 值,以指定動態的 Facet 專案值集 (,例如“facet=baseRate,values:10 |20 英吋會產生三個貯體:一個用於基底速率 0,但不包含 10,一個用於 10,但不包含 20,另一個用於 20 和更高) 。 字串串 “facet=lastRenovationDate,values:2010-02-01T00:00:00Z” 會產生兩個貯體:一個用於 2010 年 2 月之前所安裝旅館,另一個用於 2010 年 2 月 1 日或更新版本的旅館。 這些值必須以循序、遞增順序序列出,才能取得預期的結果。

“interval” 是數位或分鐘、小時、日、周、月、季、日期時間值的整數間隔大於 0。 例如,“facet=baseRate,interval:100” 會根據大小為 100 的基底速率範圍產生貯體。 如果基底費率全部介於 $60 和 $600 之間,將會有 0-100、100-200、200-300、300-400、400-500 和 500-600 的值區。 字串串 “facet=lastRenovationDate,interval:year” 會在旅館被壓縮時,針對每年產生一個貯體。

“timeoffset” 可以設定為 ([+-]hh:mm、[+-]hhmm 或 [+-]hh) 。 如果使用時,timeoffset 參數必須與 interval 選項結合,而且只有在套用至 Edm.DateTimeOffset 類型的欄位時。 值會指定帳戶的 UTC 時間位移,以設定時間介面。 例如:「facet=lastRenovationDate,interval:day,timeoffset:-01:00」 會使用從目標時區的午夜 01:00:00 UTC (午夜開始的日期界限) 。

計數和排序可以合併在相同的 Facet 規格中,但不能與間隔或值結合,而間隔和值不能合併在一起。

如果未指定 timeoffset,則會根據 UTC 時間計算日期時間的間隔 Facet。 例如:針對 「facet=lastRenovationDate,interval:day」,日期界限從 00:00:00 UTC 開始。
$filter 字串 選擇性。 標準 OData 語法中的結構化搜尋運算式。 篩選條件中只能使用可篩選的欄位。 使用 POST 呼叫時,此參數會命名為 filter,而不是$filter。 如需 Azure AI 搜尋所支援 OData 運算式文法子集的詳細數據,請參閱 Azure AI 搜尋的 OData 表達式語法
highlight 字串 選擇性。 一組用於命中項目醒目提示的欄位名稱 (以逗號分隔)。 只有可搜尋的欄位可用於點擊醒目提示。 根據預設,Azure AI 搜尋會傳回每個欄位最多 5 個醒目提示。 在域名後面附加 “-<max # of highlights>” 可設定每個字段的限制。 例如,“highlight=title-3,description-10” 會從標題字段傳回最多 3 個醒目提示的點擊,以及描述字段中最多 10 個點擊。 醒目提示的最大數目必須是介於 1 到 1000 之間的整數。
highlightPostTag 字串 選擇性。 預設值為 "</em>"。 附加至醒目提示字詞的字串標記。 必須以 highlightPreTag 設定。 URL 中的保留字元必須以百分比進行編碼 (例如,%23 而不是 #)。
highlightPreTag 字串 選擇性。 預設值為 "</em>"。 在醒目提示字詞前面加上的字串標籤。 必須使用 highlightPostTag 來設定。 URL 中的保留字元必須以百分比進行編碼 (例如,%23 而不是 #)。
minimumCoverage 整數 選擇性。 有效值為介於 0 到 100 之間的數位,表示必須可供服務查詢的索引百分比,才能回報為成功。 預設值為 “100”。

百分比涵蓋範圍表示所有分區都回應要求, (服務健康情況問題或維護活動都不會降低涵蓋範圍) 。 在預設設定下,小於完整涵蓋範圍會傳回 HTTP 狀態代碼 503。

如果發生 503 個錯誤,而且您想要增加查詢成功的可能性,特別是針對一個複本所設定的服務,降低minimumCoverage可能會很有用。 如果您設定 minimumCoverage 和 Search 成功,它會傳回 HTTP 200,並在 @search.coverage 回應中包含值,指出查詢中包含的索引百分比。 在此案例中,並非所有相符的檔都保證出現在搜尋結果中,但如果搜尋可用性比重新叫用還重要,則減少涵蓋範圍可能是可行的風險降低策略。
$orderby 字串 選擇性。 排序結果所要依據的運算式清單 (以逗號分隔)。 使用 POST 呼叫時,此參數會命名為 orderby,而不是$orderby。 每個表達式可以是功能變數名稱或 geo.distance () 函式的呼叫。 每個表達式後面可以接著 「asc」 表示遞增,而 「desc」 則表示遞減。 如果排序欄位中有 Null 值,Null 會先以遞增順序顯示,最後以遞減順序顯示。 預設值為遞增排序。 繫結將透過文件的相符分數來中斷。 如果未指定任何$orderby,預設排序順序會依檔比對分數遞減。 $orderby有32個子句的限制。
queryType 字串 選擇性。 有效值為 “simple” 或 “full”。 預設值為 "simple"。

“simple” 會使用允許 、 *""+符號的簡單查詢語法來解譯查詢字串。 依預設,查詢會跨所有可搜尋欄位評估 (或 searchFields 中所指出字段) 。

“full” 會使用 完整的 Lucene 查詢語法 來解譯查詢字串,以允許欄位特定和加權搜尋。 Lucene 查詢語言中的範圍搜尋不支援$filter,這提供類似的功能。
scoringParameter 字串 選擇性。 指出評分函式中定義之每個參數的值 (,例如 referencePointParameter) 使用 “name-value1,value2,...” 格式使用 POST 呼叫時,此參數會命名為 scoringParameters,而不是 scoringParameter。 此外,您可以將它指定為字串的 JSON 陣列,其中每個字串都是個別的名稱/值組。

針對包含函式的評分配置檔,請以字元分隔函式與其輸入清單 - 。 例如,名為 "mylocation" 的函式會是 「&scoringParameter=mylocation--122.2,44.8」。。 第一個虛線會分隔函式名稱與值清單,而第二個虛線是本範例中第一個值 (經度的一部分) 。

針對可包含逗號的標記提升之類的評分參數,您可以使用單引號逸出清單中的任何這類值。 如果值本身包含單引號,您可以使用兩個單引號加以逸出。 假設您有一個名為 的 "mytag" 標籤提升參數,而且您想要提升標籤 「Hello, O』Brien“ 和 ”Smith“,查詢字串選項接著會是 ”&scoringParameter=mytag-'Hello, O''Brien',Smith“。 只有包含逗號的值才需要引號。
scoringProfile 字串 選擇性。 評分設定檔名稱,用以評估相符文件的符合分數,以便排序結果。
scoringStatistics 字串 選擇性。 有效值為 「local」 或 「global」。 預設為 「local」。。 指定是否要計算評分統計數據,例如檔頻率、跨所有分區全域 () ,以取得更一致的評分,或在本機 (目前的分區) ,以降低延遲。 請參閱 在 Azure AI 搜尋服務中評分統計數據。 針對使用 模糊搜尋 ('~') 的字詞,一律會在本機計算評分統計數據。
搜尋 字串 選擇性。 要搜尋的文字。 除非指定 searchFields,否則預設會搜尋所有可搜尋的字段。 在索引中,可搜尋字段中的文字會標記化,因此多個字詞可以以空格符分隔 (,例如:『search=hello world』) 。 若要比對任何字詞,請使用 * (這對於布林篩選查詢非常有用)。 忽略此參數的效果與將它設為 *的效果一樣。 如需搜尋語法規格的相關資訊,請參閱 簡單的查詢語法

查詢可搜尋的欄位時,結果有時會令人意外。 Tokenizer 包含用以處理英文文字常見狀況 (像是所有格符號、數字中的逗號等等) 的邏輯。 例如,『search=123,456』 會比對單一字詞 『123,456』,而不是個別詞彙 『123』 和 『456』,因為逗號會當做英文中大型數位的千位分隔符使用。 基於這個理由,我們建議使用空格符,而不是標點符號來分隔搜尋參數中的字詞。
searchMode 字串 選擇性。 有效值為 「any」 或 「all」 預設值為 「any」。 指定必須符合任何或所有的搜尋字詞,才能將文件視為相符項目。
searchFields 字串 選擇性。 要搜尋指定文字欄位名稱清單 (以逗號分隔)。 目標欄位必須在索引架構中標示為可搜尋。
$select 字串 選擇性。 要包含在結果集中的逗號分隔欄位清單。 只有標示為可擷取的欄位可以包含在這個子句中。 若未指定或設定 *,即會在預測中包含結構描述中標記為可抓取的所有欄位。 使用 POST 呼叫時,此參數會命名為 select,而不是$select。
sessionID 字串 選擇性。 使用 sessionId 有助於改善具有多個復本之搜尋服務的相關性分數一致性。 在多復本組態中,相同查詢的個別文件相關性分數之間可能會有些微差異。 提供會話標識碼時,服務會盡最大努力將指定的要求路由至該會話的相同複本。 請小心重複重複使用相同的會話標識碼值,可能會干擾跨複本的要求負載平衡,並對搜尋服務的效能造成負面影響。 做為 sessionId 的值不能以 '_' 字元開頭。 如果服務沒有任何複本,此參數不會影響效能或分數一致性。
$skip 整數 選擇性。 要略過的搜尋結果數目。 使用 POST 呼叫時,這個參數會命名為 skip,而不是 $skip。 此值不能大於 100,000。 如果您需要依序掃描檔,但因為這項限制而無法使用 $skip ,請考慮在索引 (中每個檔都有唯一值的欄位上使用$orderby,例如) ,並改為使用範圍查詢$filter。
$top 整數 選擇性。 要擷取的搜尋結果數目。 此預設值為 50。 使用 POST 呼叫時,此參數會命名為 top,而不是 $top。 如果您指定的值大於 1000 且結果超過 1000 個,則只會傳回前 1000 個結果,以及下一頁結果的連結, (請參閱下列範例) 。@odata.nextLink

Azure AI 搜尋服務會使用 伺服器端分頁 來防止查詢一次擷取太多檔。 默認頁面大小為 50,而頁面大小上限為 1000。 這表示,如果您未指定 $top搜尋文件預設最多會傳回 50 個結果。 如果有超過 50 個結果,回應會包含擷取最多 50 個結果下一頁的資訊, (請參閱下列 範例 中的 “@odata.nextLink” 和 “@search.nextPageParameters”。 同樣地,如果您針對 指定大於1000 $top 的值,而且有超過1000個結果,則只會傳回前1000個結果,以及擷取最多1000個結果下一頁的資訊。

回應

回應成功時會傳回狀態碼:200 OK。

  {
    "@odata.count": # (if `$count`=true was provided in the query),
    "@search.coverage": # (if minimumCoverage was provided in the query),
    "@search.facets": { (if faceting was specified in the query)
      "facet_field": [
        {
          "value": facet_entry_value (for non-range facets),
          "from": facet_entry_value (for range facets),
          "to": facet_entry_value (for range facets),
          "count": number_of_documents
        }
      ],
      ...
    },
    "@search.nextPageParameters": { (request body to fetch the next page of results if not all results could be returned in this response and Search was called with POST)
      "count": ... (value from request body if present),
      "facets": ... (value from request body if present),
      "filter": ... (value from request body if present),
      "highlight": ... (value from request body if present),
      "highlightPreTag": ... (value from request body if present),
      "highlightPostTag": ... (value from request body if present),
      "minimumCoverage": ... (value from request body if present),
      "orderby": ... (value from request body if present),
      "scoringParameters": ... (value from request body if present),
      "scoringProfile": ... (value from request body if present),
      "scoringStatistics": ... (value from request body if present),
      "search": ... (value from request body if present),
      "searchFields": ... (value from request body if present),
      "searchMode": ... (value from request body if present),
      "select": ... (value from request body if present),
      "sessionId" : ... (value from request body if present),
      "skip": ... (page size plus value from request body if present),
      "top": ... (value from request body if present minus page size),
    },
    "value": [
      {
        "@search.score": document_score (if a text query was provided),
        "@search.highlights": {
          field_name: [ subset of text, ... ],
          ...
        },
        "@search.features": {
          "field_name": {
            "uniqueTokenMatches": feature_score,
            "similarityScore": feature_score,
            "termFrequency": feature_score,
          },
          ...
        },
        key_field_name: document_key,
        field_name: field_value (retrievable fields or specified projection),
        ...
      },
      ...
    ],
    "@odata.nextLink": (URL to fetch the next page of results if not all results could be returned in this response; Applies to both GET and POST)
  }

範例

您可以在 Azure AI 搜尋的 OData 運算式語法中找到更多範例。

  1. 搜尋依照日期遞減排序的索引:

    GET /indexes/hotels/docs?search=*&$orderby=LastRenovationDate desc&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "orderby": "LastRenovationDate desc"
        }  
    
  2. 在多面向搜尋中,搜尋索引並擷取 Facet 以取得特定範圍中 baseRate 的類別、評等、卷標和專案。

    GET /indexes/hotels/docs?search=*&facet=Category&facet=Rating&facet=Tags&facet=Rooms/BaseRate,values:80|150|220&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "test",  
          "facets": [ "Category", "Rating", "Tags", "Rooms/BaseRate,values:80|150|220" ]  
        }  
    

    請注意,最後一個Facet位於子欄位上。 Facet 會將父檔計數 (Hotels) ,而不是中繼子檔 (會議室) ,因此回應會決定每個價格值區中任何會議室的旅館數目。

  3. 使用篩選條件,在用戶選取 [評分 3] 和類別 [旅館] 之後,縮小先前多面向查詢結果的範圍。

    GET /indexes/hotels/docs?search=*&facet=tags&facet=Rooms/BaseRate,values:80|150|220&$filter=Rating eq 3 and Category eq 'Motel'&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "test",  
          "facets": [ "tags", "Rooms/BaseRate,values:80|150|220" ],  
          "filter": "Rating eq 3 and Category eq 'Motel'"  
        }  
    
  4. 在多面向搜尋中,為查詢中傳回的唯一字詞數目設定上限。 預設值為 10,但您可以在 facet 屬性上使用 count 參數,增加或減少此值。 這個範例會傳回 city 的 facet (限制為 5 個)。

    GET /indexes/hotels/docs?search=*&facet=Address/City,count:5&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "test",  
          "facets": [ "Address/City,count:5" ]  
        }  
    
  5. 在特定欄位 (例如,語言欄位) 中搜尋索引:

    GET /indexes/hotels/docs?search=hôtel&searchFields=Description_fr&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "hôtel",  
          "searchFields": "Description_fr"
        }  
    
  6. 跨多個欄位搜尋索引。 例如,您可以使用多種語言來儲存和查詢可搜尋的欄位,全部都使用相同的索引。 如果英文和法文描述並存於相同的檔中,您可以在查詢結果中傳回任何或全部:

    GET /indexes/hotels/docs?search=hotel&searchFields=Description,Description_fr&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "hotel",  
          "searchFields": "Description, Description_fr"
        }  
    

    您一次只能查詢索引。 除非您打算一次查詢一種語言,否則請勿為每個語言建立多個索引。

  7. 分頁 - 取得頁面大小為 10 (第一頁的項目,) :

    GET /indexes/hotels/docs?search=*&$skip=0&$top=10&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "skip": 0,  
          "top": 10  
        }  
    
  8. 分頁 - 取得頁面大小為 10 (第二頁的項目) :

    GET /indexes/hotels/docs?search=*&$skip=10&$top=10&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "skip": 10,  
          "top": 10  
        }  
    
  9. 抓取一組特定的欄位:

    GET /indexes/hotels/docs?search=*&$select=HotelName,Description&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "select": "HotelName, Description"
        }  
    
  10. 抓取符合特定篩選運算式的文件:

    GET /indexes/hotels/docs?$filter=(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "filter": "(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'"  
        }  
    
  11. 搜尋索引並傳回具有命中項目醒目提示的片段:

    GET /indexes/hotels/docs?search=something&highlight=Description&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "something",  
          "highlight": "Description"  
        }  
    
  12. 搜尋索引並傳回已排序的文件 (從距參考位置最近到最遠):

    GET /indexes/hotels/docs?search=something&$orderby=geo.distance(Location, geography'POINT(-122.12315 47.88121)')&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "something",  
          "orderby": "geo.distance(Location, geography'POINT(-122.12315 47.88121)')"
        }  
    
  13. 搜尋索引,假設有一個名為“geo” 的評分配置檔,其中包含兩個距離評分函式,一個定義名為 “currentLocation” 的參數,另一個定義名為 “lastLocation” 的參數。 在下列範例中,“currentLocation” 具有單一虛線的分隔符 (-) 。 其後面接著經度和緯度座標,其中經度是負值。

    GET /indexes/hotels/docs?search=something&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&scoringParameter=lastLocation--121.499,44.2113&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "something",  
          "scoringProfile": "geo",  
          "scoringParameters": [ "currentLocation--122.123,44.77233", "lastLocation--121.499,44.2113" ]  
        }  
    
  14. 使用簡單查詢語法尋找索引中的文件。 此查詢會傳回可搜尋欄位包含字詞 "comfort" 和 "location",但未包含 "motel" 的旅館:

    Get /indexes/hotels/docs?search=comfort +location –motel&searchMode=all&api-version=22020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "comfort +location -motel",  
          "searchMode": "all"  
        }  
    

    提示

    使用 searchMode=all 會覆寫 searchMode=any 預設值,確保 -motel 表示 "AND NOT",而不是 "OR NOT"。 如果沒有 searchMode=all,您就會得到 "OR NOT",其會擴充而不是限制搜尋結果,而這對於某些使用者來說是簡單易懂的計數器。

  15. 使用 Lucene 查詢語法 在索引中尋找檔) 。 此查詢會傳回類別欄位包含「預算」一詞以及所有可搜尋欄位包含「最近翻新」詞組的旅館。 包含「最近翻新」詞組的文件會因為詞彙提升值 (3) 而排在比較前面

    GET /indexes/hotels/docs?search=Category:budget AND \"recently renovated\"^3&searchMode=all&api-version=2020-06-30&querytype=full` 
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
         "search": "Category:budget AND \"recently renovated\"^3",  
          "queryType": "full",  
          "searchMode": "all"  
    }  
    
  16. 在索引中尋找檔,同時偏好降低延遲的一致評分。 此查詢會計算整個索引的文件頻率,並盡最大努力針對相同「會話」內的所有查詢設定相同的複本,以協助產生穩定且可重現的排名。

    GET /indexes/hotels/docs?search=hotel&sessionId=mySessionId&scoringStatistics=global&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "hotel",  
          "sessionId": "mySessionId",
          "scoringStatistics" :"global"
        }  
    

另請參閱