(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 運算式語法中找到更多範例。
搜尋依照日期遞減排序的索引:
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" }
在多面向搜尋中,搜尋索引並擷取 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] 和類別 [旅館] 之後,縮小先前多面向查詢結果的範圍。
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'" }
在多面向搜尋中,為查詢中傳回的唯一字詞數目設定上限。 預設值為 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" ] }
在特定欄位 (例如,語言欄位) 中搜尋索引:
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" }
跨多個欄位搜尋索引。 例如,您可以使用多種語言來儲存和查詢可搜尋的欄位,全部都使用相同的索引。 如果英文和法文描述並存於相同的檔中,您可以在查詢結果中傳回任何或全部:
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" }
您一次只能查詢索引。 除非您打算一次查詢一種語言,否則請勿為每個語言建立多個索引。
分頁 - 取得頁面大小為 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 }
分頁 - 取得頁面大小為 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 }
抓取一組特定的欄位:
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" }
抓取符合特定篩選運算式的文件:
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'" }
搜尋索引並傳回具有命中項目醒目提示的片段:
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" }
搜尋索引並傳回已排序的文件 (從距參考位置最近到最遠):
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)')" }
搜尋索引,假設有一個名為“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" ] }
使用簡單查詢語法尋找索引中的文件。 此查詢會傳回可搜尋欄位包含字詞 "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",其會擴充而不是限制搜尋結果,而這對於某些使用者來說是簡單易懂的計數器。使用 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" }
在索引中尋找檔,同時偏好降低延遲的一致評分。 此查詢會計算整個索引的文件頻率,並盡最大努力針對相同「會話」內的所有查詢設定相同的複本,以協助產生穩定且可重現的排名。
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" }