在 Azure AI 搜尋中使用語意排名器重寫查詢 (預覽)
注意
此功能目前處於公開預覽。 此預覽版是在沒有服務等級協定的情況下提供,不建議用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款。
查詢重寫是將使用者的查詢轉換成更有效率的程式,可新增更多字詞並精簡搜尋結果。 搜尋服務會將搜尋查詢(或其變化)傳送至產生替代查詢的產生模型。
查詢重寫可藉由更正用戶查詢中的錯字或拼字錯誤,以及擴充同義字的查詢,來改善語意排名的結果。
使用查詢重寫進行搜尋的運作方式如下:
- 用戶查詢會透過
search
要求中的屬性傳送。 - 搜尋服務會將搜尋查詢(或其變化)傳送至產生替代查詢的產生模型。
- 搜尋服務會使用原始查詢和重寫的查詢來擷取搜尋結果。
查詢重寫是選擇性功能。 若未重寫查詢,搜尋服務只會使用原始查詢來擷取搜尋結果。
注意
重寫的查詢可能不會包含原始查詢擁有的所有確切詞彙。 如果查詢具有高度特定且需要唯一標識碼或產品名稱的完全相符專案,這可能會影響搜尋結果。
必要條件
- 搜尋服務、基本層或更高版本。
注意
查詢重寫目前適用於北歐和東南亞區域。
重要
查詢重寫目前需要語意排名器。
具有語意設定和 RTF 內容的現有搜尋索引。 本指南中的範例會使用 hotels-sample-index 範例數據來示範查詢重寫。 您可以使用自己的資料和索引來測試查詢重寫。
您需要支援 REST API 要求的 Web 用戶端。 本指南中的範例已透過Visual StudioCode搭配REST用戶端擴充功能進行測試。
提示
包含說明或定義的內容最適合用於語意排名。
使用查詢重寫提出搜尋要求
在此 REST API 範例中,我們使用 搜尋檔 來制定要求。 如需要求和響應屬性的詳細資訊,請參閱 API 參考檔。
將下列要求貼到 Web 用戶端作為範本。
POST https://[search-service-name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-11-01-preview { "search": "newer hotel near the water with a great restaurant", "semanticConfiguration":"en-semantic-config", "queryType":"semantic", "queryRewrites":"generative|count-5", "queryLanguage":"en-US", "debug":"queryRewrites", "top": 1 }
您會以您的搜尋服務名稱取代
search-service-name
。如果索引名稱不同,則以您的索引名稱取代
hotels-sample-index
。我們會將 「搜尋」設定為全文搜索查詢。 除非您指定 向量查詢,否則需要搜尋屬性才能重寫查詢。 如果您指定向量查詢,則 「search」 文字必須符合
"text"
對象的屬性"vectorQueries"
。 您的搜尋字串可以支援簡單語法或完整 Lucene 語法。我們會將 「semanticConfiguration」 設定為 內嵌在索引中的預先定義語意組態 。
我們將 「queryType」 設定為 「semantic」。。 我們需要將 「queryType」 設定為 「semantic」,或在要求中包含無空的 「semanticQuery」 屬性。 查詢重寫需要語意排名 。
我們將 「queryRewrites」 設定為 「generative|count-5」,以取得最多五個查詢重寫。 您可以將計數設定為介於 1 到 10 之間的任何值。
由於我們已藉由設定 「queryRewrites」 屬性來要求查詢重寫,因此我們必須將 「queryLanguage」 設定為搜尋文字語言。 搜尋服務 會針對查詢重寫使用相同的語言。 在此範例中,我們使用 “en-US”。 支援的地區設定包括:、、、、
hy-AM
et-EE
bg-BG
bn-IN
ca-ES
cs-CZ
da-DK
ar-SA
el-GR
de-DE
es-ES
es-MX
eu-ES
fa-AE
fi-FI
ar-MA
fr-FR
fr-CA
ga-IE
gl-ES
gu-IN
he-IL
hi-IN
ar-KW
hr-HR
hr-BA
hu-HU
id-ID
is-IS
it-IT
ms-MY
ms-BN
nb-NO
mr-IN
ml-IN
lv-LV
nl-BE
lt-LT
ko-KR
kn-IN
nl-NL
ja-JP
ar-JO
ar-EG
en-US
sr-BA
pt-BR
pt-PT
ro-RO
pl-PL
sl-SL
pa-IN
ru-RU
sr-ME
sk-SK
no-NO
en-IN
en-GB
en-CA
en-AU
sr-RS
、sv-SE
、ta-IN
、te-IN
、th-TH
、tr-TR
uk-UA
vi-VN
ur-PK
、zh-CN
、 。zh-TW
我們會將 「debug」 設定為 「queryRewrites」,以取得回應中的查詢重寫。
提示
僅針對測試目的設定
"debug": "queryRewrites"
。 為了提升效能,請勿在生產環境中使用偵錯。我們將 「top」 設定為 1,只傳回前一個搜尋結果。
傳送要求以執行查詢並傳回結果。
接下來,我們會使用查詢重寫來評估搜尋結果。
評估回應
以下是包含查詢重寫的回應範例:
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"inputQuery": "newer hotel near the water with a great restaurant",
"rewrites": [
"new waterfront hotels with top-rated eateries",
"new waterfront hotels with top-rated restaurants",
"new waterfront hotels with excellent dining",
"new waterfront hotels with top-rated dining",
"new water-side hotels with top-rated restaurants"
]
},
"vectors": []
}
},
"value": [
{
"@search.score": 58.992092,
"@search.rerankerScore": 2.815633535385132,
"HotelId": "18",
"HotelName": "Ocean Water Resort & Spa",
"Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
"Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
"Category": "Luxury",
"Tags": [
"view",
"pool",
"restaurant"
],
"ParkingIncluded": true,
"LastRenovationDate": "2020-11-14T00:00:00Z",
"Rating": 4.2,
"Location": {
"type": "Point",
"coordinates": [
-82.537735,
27.943701
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
}
},
//... more properties redacted for brevity
}
]
以下是要注意的一些重點:
- 因為我們將 「debug」 屬性設定為 「queryRewrites」 以進行測試,因此回應會包含
@search.debug
含有文字輸入查詢和查詢重寫的物件。 - 因為我們將 「queryRewrites」 屬性設定為 「generative|count-5」,因此回應最多包含五個查詢重寫。
- 值
"inputQuery"
是傳送至產生模型以進行查詢重寫的查詢。 輸入查詢不一定與用戶的"search"
查詢相同。
以下是沒有查詢重寫的回應範例。
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"inputQuery": "",
"rewrites": []
},
"vectors": []
}
},
"value": [
{
"@search.score": 7.774868,
"@search.rerankerScore": 2.815633535385132,
"HotelId": "18",
"HotelName": "Ocean Water Resort & Spa",
"Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
"Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
"Category": "Luxury",
"Tags": [
"view",
"pool",
"restaurant"
],
"ParkingIncluded": true,
"LastRenovationDate": "2020-11-14T00:00:00Z",
"Rating": 4.2,
"Location": {
"type": "Point",
"coordinates": [
-82.537735,
27.943701
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
}
},
//... more properties redacted for brevity
}
]
使用查詢重寫的向量查詢
您可以在搜尋要求中包含向量查詢,將關鍵詞搜尋和向量搜尋結合成單一要求和統一回應。
以下是包含具有查詢重寫之向量查詢的查詢範例。 我們修改先前的 範例 以包含向量查詢。
- 我們會將 「vectorQueries」 物件新增至要求。 此物件包含向量查詢,並將 「kind」 設定為 「text」。。
- “text” 值與 “search” 值相同。 這些值必須相同,查詢重寫才能運作。
POST https://[search-service-name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-11-01-preview
{
"search": "newer hotel near the water with a great restaurant",
"vectorQueries": [
{
"kind": "text",
"text": "newer hotel near the water with a great restaurant",
"k": 50,
"fields": "Description",
"queryRewrites": "generative|count-3"
}
],
"semanticConfiguration":"en-semantic-config",
"queryType":"semantic",
"queryRewrites":"generative|count-5",
"queryLanguage":"en-US",
"top": 1
}
回應包含文字查詢和向量查詢的查詢重寫。
使用偵錯來測試查詢重寫
您應該測試查詢重寫,以確保它們如預期般運作。 "debug": "queryRewrites"
設定查詢要求中的 屬性,以取得回應中的查詢重寫。 設定 "debug"
是選擇性的,用於測試目的。 為了提升效能,請勿在生產環境中設定此屬性。
部分回應原因
您可能會發現偵錯 (test) 回應包含 和 vectors
屬性的text.rewrites
空數組。
{
"@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"rewrites": []
},
"vectors": []
}
},
"@search.semanticPartialResponseReason": "Transient",
"@search.semanticQueryRewriteResultType": "OriginalQueryOnly",
//... more properties redacted for brevity
}
在前述範例中:
- 回應包含
@search.semanticPartialResponseReason
值為 「Transient」 的屬性。 此訊息表示至少有一個查詢無法完成。 - 回應也包含
@search.semanticQueryRewriteResultType
值為 「OriginalQueryOnly」 的屬性。 此訊息表示查詢重寫無法使用。 只有原始查詢可用來擷取搜尋結果。
下一步
語意排名可用於混合式查詢,將關鍵詞搜尋和向量搜尋合併為單一要求和統一回應。