搜尋檔案 (預覽 REST API)
適用於:2023-07-01-Preview。 不再支援此版本。 立即 升級至較新版本。
重要
2023-07-01-Preview 新增:
- 「vectors」 指定任何向量查詢要求的查詢參數。 每個物件都應該包含查詢的向量表示法、在結果中傳回的近鄰數 「k」 數目,以及查詢執行期間要使用的向量字段。
2021-04-30-Preview 新增:
- 「semanticConfiguration」 支援將語意排名的範圍設定為特定欄位。
- 「標題」 傳回從最高語意排名檔之主要段落擷取的詞組。
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 參數
參數 | 描述 |
---|---|
服務名稱 | 必填。 將此名稱設定為搜尋服務的唯一用戶定義名稱。 |
索引名稱/檔 | 必填。 指定具名索引的檔集合。 索引別名的名稱 也可用來取代索引名稱。 |
查詢參數 | 查詢參數是在 GET 要求的 URI 上指定,以及在 POST 要求的要求本文中指定。 |
api-version | 必填。 如需更多版本,請參閱 API 版本。 |
URL 編碼建議
請記得直接呼叫 GET REST API 時,URL 編碼 特定查詢參數。 對於 搜尋檔 作業,下列查詢參數可能需要 URL 編碼:
- 搜索
- $filter
- 方面
- highlightPreTag
- highlightPostTag
僅建議個別參數使用 URL 編碼。 如果您不小心將整個查詢字串 URL 編碼(?
之後的所有專案),要求將會中斷。
此外,只有在直接使用 GET 呼叫 REST API 時,才需要 URL 編碼。 使用 POST 時,或使用 Azure AI 搜尋 .NET 用戶端連結庫時,不需要 URL 編碼,這會為您處理編碼。
要求標頭
下表描述必要和選擇性的要求標頭。
領域 | 描述 |
---|---|
Content-Type | 必填。 將此值設定為 “application/json” |
api-key | 如果您使用 Azure 角色,而且要求會提供持有人令牌,則為選擇性,否則需要密鑰。 api-key 是唯一的系統產生字串,可驗證對搜尋服務的要求。 針對檔集合的查詢要求可以將 admin-key 或 query-key 指定為 API 金鑰。 查詢索引鍵用於檔集合的唯讀作業。 如需詳細資訊,請參閱使用密鑰驗證 連線到 Azure AI 搜尋服務 |
要求本文
針對 GET:無。
針對 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)。
注意
@odata.nextLink 和 @search.nextPageParameters 的目的是保護服務免於要求太多結果的查詢,而不是提供分頁的一般機制。 如果您想要逐頁查看結果,請使用$top並$skip在一起。 例如,如果您想要大小為 10 的頁面,您的第一個要求應該有 $top=10 和 $skip=0,第二個要求應該有 $top=10,而$skip=10,第三個要求應該有 $top=10,$skip=20 等等。
查詢參數
使用 GET 呼叫時,查詢會接受 URL 上的數個參數,並以 POST 呼叫時做為要求主體中的 JSON 屬性。 某些參數的語法在 GET 和 POST 之間稍有不同。 下表說明這些差異。
名字 | 類型 | 描述 |
---|---|---|
答案 (預覽) | 字串 | 自選。 有效值為 「none」 和 「extractive」。 默認為 「none」。。 只有在查詢類型為「語意」時,這個參數才有效。 當設定為「擷取」時,查詢會從語意排名最高的檔中的關鍵段落制定並傳回答案。 默認值為一個答案,但您可以藉由新增計數來指定最多 10 個答案。 例如,“answers”: “extractive|count-3” 會傳回三個答案。 若要傳回答案,目標字段中必須有逐字內容,看起來像答案。 用於答案的語言模型會定型來辨識答案,而不是產生答案。 此外,查詢本身看起來必須像問題一樣。 |
api-version | 字串 | 必填。 用於要求的 REST API 版本。 如需支援的版本清單,請參閱 |
標題 (預覽) | 字串 | 自選。 有效值為 「none」 和 「extractive」。 默認為 「none」。。 只有在查詢類型為「語意」時,這個參數才有效。 當設定為 「擷取」時,查詢會傳回從最高排名檔中索引鍵段落擷取的標題。 當標題設定為 「擷取」時,預設會啟用醒目提示,而且可以藉由附加管道字元 '|',後面接著 'highlight-<true/false>' 選項來設定,例如 'extractive|highlight-true'。 |
$count | 布爾 | 自選。 有效值為 「true」 或 「false」。 默認為 「false」。。 使用 POST 呼叫時,此參數會命名為 count,而不是$count。 指定是否要擷取結果的總計數。 此值是符合搜尋和$filter參數的所有文件計數,忽略$top和$skip。 將此值設定為 「true」 可能會降低效能。 如果索引穩定,但會低於或過度報告任何主動新增、更新或刪除的檔,則計數是正確的。 如果您想要只取得不含任何文件的計數,您可以使用 $top=0。 |
Facet 或 Facet | 字串 | 自選。 要多面向的欄位,其中字段會屬性為「可 Facet」。 使用 GET 呼叫時,facet 是字段(facet: field1 )。 使用 POST 呼叫時,此參數會命名為 facets ,而不是 facet ,並且指定為陣列 (facets: [field1, field2, field3] )。 字串可能包含參數來自定義Facet,以逗號分隔的名稱/值組表示。
有效值為 “count”、“sort”、“values”、“interval” 和 “timeoffset”。 「計數」是 Facet 詞彙數目上限;預設值為 10。 字詞數目沒有上限,但較高的值會降低效能,特別是當Facet字段包含大量唯一詞彙時。 例如,“facet=category,count:5” 會取得 Facet 結果中的前五個類別。 如果 count 參數小於唯一字詞的數目,則結果可能不正確。 這是因為多面向查詢分散到分區的方式。 若要取得所有分區的精確計數,您可以將計數設定為零,或設定為大於或等於可面向字段中唯一值數目的值。 取捨會增加延遲。 「sort」 可以設定為 「count」、“-count”、“value”、“-value”。 使用 count 依計數排序遞減。 使用 -count 依計數排序遞增。 使用 value 依值排序遞增。 使用 -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 參數必須結合間隔選項,而且只有在套用至Edm.DateTimeOffset 類型的欄位時。 值會指定要在設定時間界限時考慮的 UTC 時間位移。 例如:「facet=lastRenovationDate,interval:day,timeoffset:-01:00」 會使用從 01:00:00 UTC 開始的日期界限(目標時區的午夜)。 計數和排序可以結合在相同的 Facet 規格中,但無法與間隔或值結合,而且間隔和值不能結合在一起。 如果未指定時間位移,則會根據 UTC 時間計算日期時間的 Interval Facet。 例如:針對 「facet=lastRenovationDate,interval:day」,日界限從 00:00:00 UTC 開始。 |
featuresMode (預覽) | 布爾 | 自選。 有效值為 「enabled」 和 「disabled」。 預設值為 「disabled」。 值,指定結果是否應該包含 查詢結果功能,用來計算與查詢相關的文件相關性分數,例如每個欄位相似度。 使用「已啟用」來公開更多查詢結果功能:每個欄位相似度分數、每個欄位字詞頻率,以及每個相符的唯一標記數目。 如需詳細資訊,請參閱 相似度和評分。 |
$filter | 字串 | 自選。 標準 OData 語法中的結構化搜尋表達式。 篩選中只能使用可篩選的欄位。 使用 POST 呼叫時,此參數會命名為 filter,而不是$filter。 如需 Azure AI 搜尋支援之 OData 運算式文法子集的詳細資訊,請參閱 Azure AI 搜尋服務的 OData 表達式語法。 |
高亮 | 字串 | 自選。 一組逗號分隔功能變數名稱,用於叫用醒目提示。 只有可搜尋的欄位可用於點擊醒目提示。 根據預設,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 (預覽) | 字串 | 自選。 有效值為 支援的語言。 預設為 「en-us」。 如果您使用speller=lexicon 或queryType=semantic,則必須設定此參數。 queryLanguage 中指定的語言同時用於拼字檢查,以及重新產生結果並擷取標題或答案的語意模型。 用於 queryLanguage 的連結庫與其他地區設定型字段屬性無關,例如 語言分析器 用於編製索引和全文搜索。 |
queryType | 字串 | 自選。 有效值為 “simple”、“full” 或 “semantic” (預覽)。 預設值為 「simple」。 在向量搜尋中會忽略此值,但適用於混合式案例中的文字搜尋。
「simple」 會使用 簡單查詢語法 來解譯查詢字串,以允許 + 、* 和 "" 等符號。 根據預設,查詢會評估每個檔中所有可搜尋的欄位(或 searchFields 中所指出的欄位)。
「full」 會使用 完整的 Lucene 查詢語法來解譯查詢字串, 允許字段特定和加權搜尋。 不支援 Lucene 查詢語言中的範圍搜尋,支援提供類似功能的 $filter。 「語意」藉由使用 Bing 主體上定型的排名模型來重新調整前 50 個相符專案,以自然語言表示的查詢,而不是關鍵詞,來改善搜尋結果的有效位數。 如果您將查詢類型設定為語意,您也必須設定 queryLanguage 和 semanticConfiguration。 如果您想要也傳回前 3 個答案,您可以選擇性地設定答案,如果查詢輸入是以自然語言來制定(「什麼是 ...),您也可以選擇性地設定標題,以從排名最高的檔擷取關鍵段落。 |
scoringParameter | 字串 | 自選。 使用 “name-value1,value2,...” 格式,指出評分函式中定義之每個參數的值(例如 referencePointParameter)使用 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.String 、Edm.ComplexType 或 Collection(Edm.String) 。 |
$select | 字串 | 自選。 要包含在結果集中的逗號分隔欄位清單。 只有標示為可擷取的欄位可以包含在這個子句中。 如果未指定或設定為 * ,則會在投影中包含標示為可擷取的所有欄位。 使用 POST 呼叫時,此參數會命名為 select,而不是$select。 |
semanticConfiguration (預覽) | 字串 | 自選。 如果 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 (預覽) | 陣列 | 自選。 陣列中的物件類型是向量查詢。 向量查詢的查詢參數。
「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 搜尋的
範例:簡單搜尋
使用簡單查詢語法在索引中尋找檔。 此查詢會傳回可搜尋字段包含 「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 搜尋服務中的
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)
和向量組態的索引,您可以指定向量查詢參數。 向量查詢參數包含查詢範圍中的向量欄位、要傳回的頂端點擊數 「k」 數目,以及查詢輸入的向量表示法。
如果索引包含文字欄位,則新增 「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) 而非中繼子檔 (Rooms),因此回應將決定每個價格貯體中任何房間的旅館數目。
範例:縮小多面向查詢
使用篩選,在用戶選取評等 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'"
}
範例:具有每個類別限制的多面向搜尋
在多面向搜尋中,針對查詢中傳回的唯一字詞設定上限。 默認值為 10,但您可以使用 facet 屬性上的 count 參數來增加或減少此值。 此範例會傳回城市 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)')"
}
範例:「由我尋找」(提升附近位置的相關性
搜尋索引,假設有一個稱為「地理」的評分配置檔與兩個距離評分函式,一個定義名為 “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"
}
範例:評分統計數據 (featuresMode)
在索引中尋找檔,並傳回每個結果的資訊擷取功能清單,描述相符檔與查詢之間的評分。 此查詢也會計算整個索引的文件頻率,以產生更一致的評分。
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。
如需使用每項功能的詳細資訊,請參閱 啟用語意排名和標題、傳回語意答案,將拼字檢查新增至查詢。
“(preview)” 指定表示所有特徵的驗證測試(語意排名、標題、答案和拼字檢查)都在進行中或擱置中。 我們鼓勵使用下表中的所有語言變體,但建議對預覽語言進行更多測試,以確保結果對您的內容有效。 具有複選標記且沒有預覽指定的語言已使用對等數據集進行驗證,具有可測量的相關性。
語言 | queryLanguage | 語意排名器和標題 | 語意答案 | 拼寫 |
---|---|---|---|---|
英文 [en ] |
en, en-US (預設值),en-GB ,en-IN ,en-CA ,en-AU |
✔️ | ✔️ | ✔️ (en, en-US ) |
法文 [fr ] |
fr 、fr-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 (預設值) |
✔️ (預覽) | ✔️ (預覽) | |
希伯來語 |
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 (預設值) |
✔️ (預覽) | ✔️ (預覽) | |
泰米爾 [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 (預設值) |
✔️ (預覽) | ✔️ (預覽) |
另請參閱
- 在 Azure AI 搜尋服務中建立查詢
- Azure AI 搜尋 中的
查詢 - 全文搜索在 Azure AI 搜尋服務中的運作方式
- Azure 搜尋服務 的
OData 表達式語法 - Azure AI 搜尋 中的簡單查詢語法