搜尋檔案 (預覽 REST API)

適用於:2023-07-01-Preview、2021-04-30-Preview、2020-06-30-Preview

重要

2023-07-01-Preview 新增:

  • 指定任何向量查詢要求的 「vectors」 查詢參數。 每個物件都應該包含查詢的向量表示法、要在結果中傳回之最鄰近的 「k」 數目,以及要在查詢執行期間使用的向量字段。

2021-04-30-Preview 新增:

  • “semanticConfiguration” 支援界定特定字段的語意排名。
  • “captions” 會傳回擷取自最高語意排名檔中主要段落的片語。

2020-06-30-Preview 新增:

  • “queryType=semantic” 支持語意重新調整和回應。
  • 語意查詢中的 「searchFields」 會建立用來制定標題和答案之字段的優先順序。 此方法已由 2021-04-30-Preview 中的 “semanticConfiguration” 取代,現在已過時。
  • 「拼字檢查」 可在查詢輸入上啟用拼字更正。
  • “queryType=semantic” 和 “speller” 都需要 “queryLanguage”。
  • “featuresMode” 會解壓縮搜尋分數、報告每個欄位字詞頻率、每個欄位相似度分數,以及唯一相符專案的個別欄位數目。

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

您可以在大部分的查詢中使用 GET 或 POST,但您必須使用 POST 進行向量搜尋,因為向量查詢參數不符合 URI。 查詢參數 是在 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
服務名稱 必要。 將此名稱設定為搜尋服務的唯一用戶定義名稱。
索引名稱/檔 必要。 指定具名索引的檔集合。 索引別名的名稱也可以用來取代索引名稱。
查詢參數 (query parameters) 查詢參數是在 GET 要求的 URI 上指定,以及在 POST 要求的要求本文中指定。
api-version 必要。 目前版本為 2023-07-01-Preview。 如需更多版本,請參閱 API 版本

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 金鑰是唯一的系統產生字串,可驗證對搜尋服務的要求。 針對檔案集合的查詢要求可以將系統管理金鑰或查詢金鑰指定為 API 金鑰。 查詢索引鍵用於對檔集合進行唯讀作業。 如需詳細資訊 ,請參閱使用密鑰驗證連線到 Azure AI 搜尋 服務。

要求本文

針對 GET:None。

針對 POST:

{  
     "answers": "none" (default) | "extractive", 
     "count": true | false (default),
     "captions": "none" (default) | "extractive",
     "facets": [ "facet_expression_1", "facet_expression_2", ... ],  
     "featuresMode" : "disabled" (default) | "enabled",
     "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",
     "queryLanguage": "en-us" (default) | (a supported language code), 
     "queryType": "simple" (default) | "full" | "semantic",
     "scoringParameters": [ "scoring_parameter_1", "scoring_parameter_2", ... ],  
     "scoringProfile": "scoring_profile_name",  
     "scoringStatistics" : "local" (default) | "global",
     "search": "simple_query_expression",  
     "searchFields": "field_name_1, field_name_2, ...",  
     "searchMode": "any" (default) | "all",  
     "select": "field_name_1, field_name_2, ...",  
     "semanticConfiguration": "semantic_configuration_name",
     "sessionId" : "session_id",
     "skip": # (default 0), 
     "speller": "none" (default) | "lexicon",  
     "top": #,
     "vectors": [
      {
        "value": "a vector representation of the query",
        "k": an integer (number of nearest neighbors to return as top results),
        "fields": "a comma-delimited list of vector fields to use in the query"
      }
     ]
   }  

接續部分搜尋回應

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

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

注意

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

查詢參數

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

名稱 類型 Description
(預覽) 的解答 字串 選擇性。 有效值為 「none」 和 「extractive」。 默認為 「none」。。 只有當查詢類型為「語意」時,這個參數才有效。 當設定為「擷取」時,查詢會從最高語意排名檔中的重要段落撰寫並傳回答案。 默認值為一個答案,但您可以藉由新增計數來指定最多 10 個答案。 例如,“answers”: “extractive|count-3” 會傳回三個答案。 若要傳回答案,目標字段中必須有逐字內容,看起來像答案。 用於答案的語言模型會定型來辨識答案,而不會產生答案。 此外,查詢本身看起來必須像問題一樣。
api-version 字串 必要。 用於要求的 REST API 版本。 如需支援的版本清單,請參閱 API 版本。 針對這項作業,不論您是否使用 GET 或 POST 呼叫 搜尋檔 ,api-version 都會指定為 URI 參數。
(預覽) 的標題 字串 選擇性。 有效值為 「none」 和 「extractive」。 默認為 「none」。。 只有當查詢類型為「語意」時,這個參數才有效。 當設定為「擷取」時,查詢會傳回擷取自最高排名檔中主要段落的標題。 當標題設定為 「擷取」時,預設會啟用醒目提示,而且可以附加管道字元 '|',後面接著 'highlight-true</false>' 選項來設定,例如 'extractive|highlight-true'。
$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 參數小於唯一字詞的數目,結果可能不正確。 這是因為多面向查詢的方式會散佈於各個分區中。 若要取得所有分區的精確計數,您可以將計數設定為零,或設定為大於或等於可 Facet 字段中唯一值數目的值。 取捨會增加延遲。

“sort” 可以設定為 “count”、“-count”、“value”、“-value”。 使用 count 依計數排序遞減。 使用 -count 依 count 排序遞增。 使用值依值排序遞增。 使用 -value 依值遞減排序 (例如,“facet=category,count:3,sort:count” 會依每個城市名稱的檔數目遞減順序來取得 facet 中的前三個類別) 。 如果前三個類別是預算、旅館和倫敦,而預算有五個點擊數,則「旅館」有六個,而「旅館」有四個,則貯體會依「美國預算」、「預算」、「機場」的順序排列。 針對 -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 規格中,但不能與間隔或值結合,而間隔和值不能合併在一起。

如果未指定時間位移,則會根據UTC時間計算日期時間的間隔Facet。 例如:針對 「facet=lastRenovationDate,interval:day」,日期界限從 00:00:00 UTC 開始。
featuresMode (預覽) boolean 選擇性。 有效值為 「enabled」 和 「disabled」。 預設值為 「disabled」。 值,指定結果是否應該包含 查詢結果特徵,用來計算與查詢相關的文件相關性分數,例如每個欄位相似度。 使用「已啟用」來公開更多查詢結果功能:每個欄位相似度分數、每個欄位字詞頻率,以及符合每個欄位數目的唯一令牌。 如需詳細資訊,請參閱 相似性和評分
$filter 字串 選擇性。 標準 OData 語法中的結構化搜尋運算式。 篩選條件中只能使用可篩選的欄位。 使用 POST 呼叫時,此參數會命名為 filter,而不是$filter。 如需 Azure AI 搜尋所支援 OData 運算式文法子集的詳細數據,請參閱 Azure AI 搜尋的 OData 表達式語法
highlight 字串 選擇性。 一組用於命中項目醒目提示的欄位名稱 (以逗號分隔)。 只有可搜尋的欄位可用於點擊醒目提示。 根據預設,Azure AI 搜尋會傳回每個欄位最多五個醒目提示。 在域名後面附加 “-<max # of highlights>” 可設定每個字段的限制。 例如,“highlight=title-3,description-10” 會從標題字段傳回最多三個醒目提示的點擊,以及描述字段中最多 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個子句的限制。
queryLanguage (preview) 字串 選擇性。 有效值為 支持的語言。 默認為 「en-us」。。 如果您使用speller=lexicon 或queryType=semantic,則必須設定此參數。 queryLanguage 中指定的語言會用於拼字檢查,以及重新產生結果並擷取 標題 或答案的語意模型。 用於 queryLanguage 的連結庫與其他地區設定型字段屬性無關,例如用於編製索引和全文搜索 的語言分析器
queryType 字串 選擇性。 有效值為 「簡單」、「完整」或「語意」, (預覽) 。 預設值為 "simple"。 針對向量搜尋會忽略此值,但適用於混合式案例中的文字搜尋。

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

“full” 會使用 完整的 Lucene 查詢語法 來解譯查詢字串,以允許欄位特定和加權搜尋。 Lucene 查詢語言中的範圍搜尋不受支持,因為$filter提供類似的功能。

」語意」藉由使用 Bing 主體上定型的排名模型,針對以自然語言表示的查詢,重新調整前 50 個相符專案,以改善搜尋結果的有效位數。 如果您將查詢類型設定為語意,您也必須設定 queryLanguage 和 semanticConfiguration。 如果您想要同時傳回前 3 個答案,您可以選擇性地設定答案,如果查詢輸入是以自然語言 (「什麼是 ...) ,您可以選擇性地設定標題,以從最高排名的檔擷取主要段落。
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 搜尋中評分統計數據。 使用 模糊搜尋 ('~') 的詞彙,一律會在本機計算計分統計數據。
搜尋 字串 選擇性。 要搜尋的文字。 針對向量搜尋會忽略此值,但適用於混合式案例中的文字搜尋。 在 REST API 中,除非指定 searchFields,否則預設會搜尋所有可搜尋的欄位。 在索引中,可搜尋字段中的文字會標記化,因此多個字詞可以以空格符分隔 (例如:'search=hello world') 。 若要比對任何字詞,請使用 * (這對於布林篩選查詢非常有用)。 忽略此參數的效果與將它設為 *的效果一樣。 如需搜尋語法規格的相關資訊,請參閱 簡單的查詢語法

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

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

“value” 是搜尋查詢的向量表示法。 這個表示法必須在外部形成。 Azure AI 搜尋不會建立內嵌。

“k” 是整數,指定要傳回做為頂端點擊的近鄰數目。 預設值為 50。 最小值為 1,最大值為 10,000。

“fields” 是以逗號分隔的清單功能變數名稱,其中包含向量數據。 只有類型的 Collection(Edm.Single) 欄位可以包含在 [欄位] 清單中。

回應

回應成功時會傳回狀態碼:200 OK。 本文中有兩個範例回應,分別用於語意搜尋和featuresMode。

語意查詢的回應範例

第一個範例顯示語意查詢 「雲端如何形成」最上層結果的完整回應。

  • 當您指定 answer 參數,以及索引中的查詢和目標欄位包含可辨識為答案的內容時,會出現 “@search.answer”。 @search.answers具有索引鍵、文字和醒目提示的陣列。 分數是答案強度的指標。

  • “value” 是響應的主體。 @search.rerankerScore會由語意排名演算法指派,並用來將結果排名 (@search.score 來自 BM25 相似度演算法,用於對初始結果進行評分) 。 標題包括純文字和醒目提示的版本。 此範例是使用 OCR 和實體辨識技能所建立。 擷取和合併內容的欄位會包含在回應中。

{
    "@search.answers": [
        {
            "key": "aHR0cHM6Ly9oZWlkaXN0YmxvYnN0b3JhZ2UuYmxvYi5jb3JlLndpbmRvd3MubmV0L25hc2EtZWJvb2stMS01MC9wYWdlLTQ1LnBkZg2",
            "text": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the atmosphere until it cools and condenses into water droplets. Clouds generally form where air is ascending (over land in this case),   but not where it is descending (over the river).",
            "highlights": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the   atmosphere until it cools and condenses into water droplets. Clouds generally form<em> where air is ascending</em> (over land in this case),   but not where it is<em> descending</em> (over the river).",
            "score": 0.94639826
        }
    ],
    "value": [
        {
            "@search.score": 0.5479723,
            "@search.rerankerScore": 1.0321671911515296,
            "@search.captions": [
                {
                    "text": "Like all clouds, it forms when the air reaches its dew point—the temperature at which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley fog, which is common in the Pacific Northwest of North America.",
                    "highlights": "Like all<em> clouds</em>, it<em> forms</em> when the air reaches its dew point—the temperature at    which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley<em> fog</em>, which is common in the Pacific Northwest of North America."
                }
            ],
            "content": "\nA\nT\n\nM\nO\n\nS\nP\n\nH\nE\n\nR\nE\n\nE\nA\n\nR\nT\n\nH\n\n34\n\nValley Fog\nCanada\n\nFog is essentially a cloud lying on the ground. Like all clouds, it forms when the air reaches its dew point—the temperature at  \n\nwhich an air mass is cool enough for its water vapor to condense into liquid droplets.\n\nThis false-color image shows valley fog, which is common in the Pacific Northwest of North America. On clear winter nights, the \n\nground and overlying air cool off rapidly, especially at high elevations. Cold air is denser than warm air, and it sinks down into the \n\nvalleys. The moist air in the valleys gets chilled to its dew point, and fog forms. If undisturbed by winds, such fog may persist for \n\ndays. The Terra satellite captured this image of foggy valleys northeast of Vancouver in February 2010.\n\n\n",
            "metadata_storage_path": "aHR0cHM6Ly9oZWlkaXN0YmxvYnN0b3JhZ2UuYmxvYi5jb3JlLndpbmRvd3MubmV0L25hc2EtZWJvb2stMS01MC9wYWdlLTQxLnBkZg2",
            "people": [],
            "locations": [
                "Pacific Northwest",
                "North America",
                "Vancouver"
            ],
            "merged_content": "\nA\nT\n\nM\nO\n\nS\nP\n\nH\nE\n\nR\nE\n\nE\nA\n\nR\nT\n\nH\n\n34\n\nValley Fog\nCanada\n\nFog is essentially a cloud lying on the ground. Like all clouds, it forms when the air reaches its dew point—the temperature at  \n\nwhich an air mass is cool enough for its water vapor to condense into liquid droplets.\n\nThis false-color image shows valley fog, which is common in the Pacific Northwest of North America. On clear winter nights, the \n\nground and overlying air cool off rapidly, especially at high elevations. Cold air is denser than warm air, and it sinks down into the \n\nvalleys. The moist air in the valleys gets chilled to its dew point, and fog forms. If undisturbed by winds, such fog may persist for \n\ndays. The Terra satellite captured this image of foggy valleys northeast of Vancouver in February 2010.\n\n\n",
            "text": [],
            "layoutText": []
        }
    ]
}

featuresMode 的回應範例

此範例顯示包含 featuresMode 之查詢的 「@search.features」 輸出。

  {
    "@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),
      "featuresMode" : ... (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 運算式語法中找到更多範例。

範例:簡單搜尋

使用簡單查詢語法尋找索引中的文件。 此查詢會傳回可搜尋欄位包含字詞 "comfort" 和 "location",但未包含 "motel" 的旅館:

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

提示

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

範例:完整的 Lucene 搜尋

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

GET /indexes/hotels/docs?search=Category:budget AND \"recently renovated\"^3&searchMode=all&api-version=2021-04-30-Preview&querytype=full`
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "Category:budget AND \"recently renovated\"^3",  
      "queryType": "full",  
      "searchMode": "all"  
}  

範例:語意搜尋

使用答案、標題和醒目提示的內容叫用語意排名模型。 您可以在上一節中找到此查詢的回應。

POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
{
  "search": "how do clouds form",
  "queryType": "semantic",
  "semanticConfiguration": "my-semantic-config",
  "queryLanguage": "en-us",
  "answers": "extractive",
  "captions": "extractive",
  "count": "true"
}

範例:向量搜尋

對於具有型 Collection(Edm.Single) 別欄位和向量組態的索引,您可以指定向量查詢參數。 向量查詢參數包含查詢範圍中的向量欄位、要傳回的前幾個點擊數,以及查詢輸入的向量表示。

如果索引包含文字欄位,則新增 「select」 參數很有説明。 比對和相關性是以向量為基礎,但包含人類可讀取內容的欄位對於讀取結果的人更實用。 或者,您也可以撰寫程序代碼,將搜尋結果中的向量數據轉換成文字。

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version={{api-version}}
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "search": (this parameter is ignored in vector search),
    "vectors": [{
        "value": [
            -0.009154141,
            0.018708462,
            . . . 
            -0.02178128,
            -0.00086512347
        ],
        "fields": "contentVector",
        "k": 5
    }],
    "select": "title, content, category"
}

範例:orderby

搜尋索引,並以遞減順序傳回依日期排序的結果。

GET /indexes/hotels/docs?search=*&$orderby=LastRenovationDate desc&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "orderby": "LastRenovationDate desc"
    }  

範例:使用 OData 運算式篩選

抓取符合特定篩選運算式的文件:

GET /indexes/hotels/docs?$filter=(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "filter": "(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'"  
    }  

範例:多面向搜尋

在多面向搜尋中,搜尋索引,並擷取類別、評等、標籤,以及特定範圍內baseRate的專案。

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

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

範例:縮小多面向查詢的範圍

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

GET /indexes/hotels/docs?search=*&facet=tags&facet=Rooms/BaseRate,values:80|150|220&$filter=Rating eq 3 and Category eq 'Motel'&api-version=2021-04-30-Preview  
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview 
    {  
      "search": "test",  
      "facets": [ "tags", "Rooms/BaseRate,values:80|150|220" ],  
      "filter": "Rating eq 3 and Category eq 'Motel'"  
    }  

範例:具有每個類別限制的Facet搜尋

在多面向搜尋中,為查詢中傳回的唯一字詞數目設定上限。 預設值為 10,但您可以在 facet 屬性上使用 count 參數,增加或減少此值。 這個範例會傳回 city 的 facet (限制為 5 個)。

GET /indexes/hotels/docs?search=*&facet=Address/City,count:5&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "test",  
      "facets": [ "Address/City,count:5" ]  
    }  

範例:現場搜尋

例如,在特定欄位內搜尋索引 (,例如語言欄位)

GET /indexes/hotels/docs?search=hôtel&searchFields=Description_fr&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "hôtel",  
      "searchFields": "Description_fr"
    }  

跨多個字段搜尋索引。 例如,您可以使用多種語言來儲存和查詢可搜尋的欄位,全部都使用相同的索引。 如果相同檔中的英文和法文描述並存,您可以在查詢結果中傳回任何或全部:

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

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

範例:分頁結果

取得專案的第一頁, (頁大小為 10) :

GET /indexes/hotels/docs?search=*&$skip=0&$top=10&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "skip": 0,  
      "top": 10  
    }  

取得第二頁的專案 (頁大小為 10) :

GET /indexes/hotels/docs?search=*&$skip=10&$top=10&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "skip": 10,  
      "top": 10  
    }  

範例:限制結果集中的欄位

抓取一組特定的欄位:

GET /indexes/hotels/docs?search=*&$select=HotelName,Description&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "select": "HotelName, Description"
    }  

範例:結果中的點擊醒目提示

搜尋索引並傳回具有命中項目醒目提示的片段:

GET /indexes/hotels/docs?search=something&highlight=Description&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "something",  
      "highlight": "Description"  
    }  

範例:地理空間搜尋

搜尋索引並傳回已排序的文件 (從距參考位置最近到最遠):

GET /indexes/hotels/docs?search=something&$orderby=geo.distance(Location, geography'POINT(-122.12315 47.88121)')&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "something",  
      "orderby": "geo.distance(Location, geography'POINT(-122.12315 47.88121)')"
    }  

範例:「find by me」 (提升鄰近位置的相關性

搜尋索引,假設有一個名為 “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=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "something",  
      "scoringProfile": "geo",  
      "scoringParameters": [ "currentLocation--122.123,44.77233", "lastLocation--121.499,44.2113" ]  
    }  

範例:查詢完整索引,而不是分區

在索引中尋找檔,同時偏好以較低的延遲進行一致的評分。 此查詢會計算整個索引的文件頻率,並盡最大努力針對相同「會話」內的所有查詢設定相同的複本,這有助於產生穩定且可重現的排名。

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

範例:評分統計數據 (功能Mode)

在索引中尋找檔,並針對描述相符文件與查詢之間評分的每個結果傳回資訊擷取功能清單。 此查詢也會計算整個索引的文件頻率,以產生更一致的評分。

GET /indexes/hotels/docs?search=hotel&featuresMode=enabled&scoringStatistics=global&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "hotel",  
      "featuresMode": "enabled",
      "scoringStatistics" :"global"
    }  

包含的 search.features 回應範例如下所示:

    "@search.score": 0.91875637,
    "@search.features": {
        "Description": {
            "uniqueTokenMatches": 1,
            "similarityScore": 0.2917966,
            "termFrequency": 2
        },
        "HotelName": {
            "uniqueTokenMatches": 1,
            "similarityScore": 0.44458693,
            "termFrequency": 1
        }
      . . .

定義

本節提供有關參數的詳細數據,這些參數太複雜而無法涵蓋在主數據表中。

連結 描述
queryLanguage 拼字檢查和語意搜尋支援的語言清單。

queryLanguage

下表提供 queryLanguage 參數的有效值、在 “queryLanguage” 數據行中,且不區分大小寫。 整體參數的預設值為 「en-us」。。 在每個語言中,每個雙字元語言程式代碼都有預設的變體。 例如,如果您指定 「es」,則預設會使用 「es-us」。。 查詢要求需要 queryLanguage 參數,其中包含 “queryType=semantic” 或 “speller=lexicon”。 整個要求只有一個 queryLanguage 值,而且該值將用於語意排名、標題、答案和拼字檢查, (個別功能沒有覆寫) 。

目前,語言支援會因功能而異。 完整功能僅支援英文、西班牙文、法文和德文,但請注意拼字檢查會實作較少的變體。

如果您指定指定功能不支援的語言代碼,例如具有拼字檢查的 EN-GB,服務會傳回 HTTP 400。

如需使用每項功能的詳細資訊,請參閱 啟用語意排名和標題傳回語意答案,以及 將拼字檢查新增至查詢

「 (預覽) 」指定表示所有功能之間的驗證測試 (語意排名、標題、答案和拼字檢查) 為進行中或擱置中。 我們鼓勵使用下表中的所有語言變體,但建議對預覽語言進行更多測試,以確保結果對您的內容有效。 具有複選標記且沒有預覽指定的語言已使用對等數據集進行驗證,並具有可測量的相關性。

語言 queryLanguage 語意排名器和標題 語意答案 拼寫
英文 [en] en, en-US (預設) 、en-GBen-IN、、 en-CAen-AU ✔️ ✔️ ✔️ en, en-US ()
法文 [fr] frfr-FR (預設) 、 fr-CA ✔️ ✔️ ✔️ fr, fr-FR ()
德文 [de] de, de-DE (預設) ✔️ ✔️ ✔️ de, de-DE ()
西班牙文 [es] es, es-ES (預設),es-MX ✔️ ✔️ ✔️ es, es-ES ()
義大利文 [it] it, it-IT (預設) ✔️ ✔️
日文 [ja] ja, ja-JP (預設) ✔️ ✔️ (預覽)
中文 [zh] zh, zh-CN (預設),zh-TW ✔️ ✔️ (預覽)
葡萄牙文 [pt] pt, pt-BR (預設),pt-PT ✔️ ✔️ (預覽)
荷蘭文 [nl] nl, nl-BE, nl-NL (預設) ✔️ (預覽) ✔️ (預覽) ✔️ (nl, nl-NL)
阿拉伯文 [ar] ar, ar-SA (預設),ar-EG, ar-MA, ar-KW, ar-JO ✔️ (預覽) ✔️ (預覽)
亞美尼亞文 hy-AM (預設) ✔️ (預覽) ✔️ (預覽)
孟加拉文 bn-IN (預設) ✔️ (預覽) ✔️ (預覽)
巴斯克文 eu-ES (預設) ✔️ (預覽) ✔️ (預覽)
保加利亞文 [bg] bg, bg-BG (預設) ✔️ (預覽) ✔️ (預覽)
卡達尼亞文 [ca] ca, ca-ES (預設) ✔️ (預覽) ✔️ (預覽)
克羅埃西亞文 [hr] hr, hr-HR (預設) ,hr-BA ✔️ (預覽) ✔️ (預覽)
捷克文 [cs] cs, cs-CZ (預設) ✔️ (預覽) ✔️ (預覽)
丹麥文 [da] da, da-DK (預設) ✔️ (預覽) ✔️ (預覽)
愛沙尼亞文 [et] et, et-EE (預設) ✔️ (預覽) ✔️ (預覽)
芬蘭文 [fi] fi, fi-FI (預設) ✔️ (預覽) ✔️ (預覽)
加里斯亞文 gl-ES (預設) ✔️ (預覽) ✔️ (預覽)
希臘文 [el] el, el-GR (預設) ✔️ (預覽) ✔️ (預覽)
古吉拉特文 gu-IN (預設) ✔️ (預覽) ✔️ (預覽)
Hebrew he-IL (預設) ✔️ (預覽) ✔️ (預覽)
印度文 [hi] hi, hi-IN (預設) ✔️ (預覽) ✔️ (預覽)
匈牙利文 [hu] hu, hu-HU (預設) ✔️ (預覽) ✔️ (預覽)
愛爾蘭文 [is] is, is-IS (預設) ✔️ (預覽) ✔️ (預覽)
印尼文 [id] id, id-ID (預設) ✔️ (預覽) ✔️ (預覽)
愛爾蘭文 ga-IE (預設) ✔️ (預覽) ✔️ (預覽)
坎那達文 kn-IN (預設) ✔️ (預覽) ✔️ (預覽)
韓文 [ko] ko, ko-KR (預設) ✔️ (預覽) ✔️ (預覽)
義大利文 [lv] lv, lv-LV (預設) ✔️ (預覽) ✔️ (預覽)
立陶宛文 [lt] lt, lt-LT (預設) ✔️ (預覽) ✔️ (預覽)
馬來亞拉姆文 ml-IN (預設) ✔️ (預覽) ✔️ (預覽)
馬來西亞 [ms] ms, ms-MY (預設),ms-BN ✔️ (預覽) ✔️ (預覽)
馬拉地文 mr-IN (預設) ✔️ (預覽) ✔️ (預覽)
挪威文 [no] 否,no-NO (預設) ,nb-NO ✔️ (預覽) ✔️ (預覽)
波斯文 fa-AE (預設) ✔️ (預覽) ✔️ (預覽)
波蘭文 [pl] pl, pl-PL (預設) ✔️ (預覽) ✔️ (預覽)
旁遮普文 pa-IN (預設) ✔️ (預覽) ✔️ (預覽)
羅馬尼亞文 [ro] ro, ro-RO (預設) ✔️ (預覽) ✔️ (預覽)
俄文 [ru] ru, ru-RU (預設) ✔️ (預覽) ✔️ (預覽)
塞爾維亞文 [sr] (斯拉夫文或拉丁文) sr, sr-BA (預設),sr-ME, sr-RS ✔️ (預覽) ✔️ (預覽)
斯洛伐克文 [sk] sk, sk-SK (預設) ✔️ (預覽) ✔️ (預覽)
斯洛維尼亞文 [sl] sl, sl-SL (預設) ✔️ (預覽) ✔️ (預覽)
Tamil [ta] ta, ta-IN (預設) ✔️ (預覽) ✔️ (預覽)
瑞典文 [sv] sv, sv-SE (預設) ✔️ (預覽) ✔️ (預覽)
泰盧固文 te-IN (預設) ✔️ (預覽) ✔️ (預覽)
泰文 [th] th, th-TH (預設) ✔️ (預覽) ✔️ (預覽)
土耳其文 [tr] tr, tr-TR (預設) ✔️ (預覽) ✔️ (預覽)
烏克蘭文 [uk] uk, uk-UA (預設) ✔️ (預覽) ✔️ (預覽)
烏都文 ur-PK (預設) ✔️ (預覽) ✔️ (預覽)
越南文 [va] va, vi-VN (預設) ✔️ (預覽) ✔️ (預覽)

另請參閱