Azure AI Search'te semantik derecele sorguları yeniden yazma (Önizleme)
Not
Bu özellik şu anda genel önizlemededir. Bu önizleme, hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için önerilmez. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri Ek Kullanım Koşulları.
Sorgu yeniden yazma, kullanıcının sorgusunu daha etkili bir sorguya dönüştürme, daha fazla terim ekleme ve arama sonuçlarını iyileştirme işlemidir. Arama hizmeti, arama sorgusunu (veya bir çeşitlemini) alternatif sorgular üreten bir modele gönderir.
Sorgu yeniden yazma, kullanıcı sorgularındaki yazım hatalarını veya yazım hatalarını düzelterek ve eş anlamlılarla sorguları genişleterek anlamsal derecelendirmeden elde edilen sonuçları geliştirir.
Sorgu yeniden yazma ile arama şu şekilde çalışır:
- Kullanıcı sorgusu, istekteki
search
özelliği aracılığıyla gönderilir. - Arama hizmeti, arama sorgusunu (veya bir çeşitlemini) alternatif sorgular üreten bir modele gönderir.
- Arama hizmeti, arama sonuçlarını almak için özgün sorguyu ve yeniden yazılan sorguları kullanır.
Sorgu yeniden yazma isteğe bağlı bir özelliktir. Sorgu yeniden yazma olmadan, arama hizmeti arama sonuçlarını almak için yalnızca özgün sorguyu kullanır.
Not
Yeniden yazılan sorgular, özgün sorgunun sahip olduğu tüm terimleri içermeyebilir. Sorgu son derece özelse ve benzersiz tanımlayıcılar veya ürün kodları için tam eşleşmeler gerekiyorsa bu durum arama sonuçlarını etkileyebilir.
Önkoşullar
- Arama hizmeti, Temel katman veya üzeri.
Not
Sorgu yeniden yazma şu anda Kuzey Avrupa ve Güneydoğu Asya bölgelerinde kullanılabilir.
- Arama hizmetinizde semantik dereceleyici etkinleştirilmelidir. Özelliğe giriş yapmanız gerekiyorsa anlam derecelendirmesini gözden geçirin.
Önemli
Şu anda sorgu yeniden yazma için anlam dereceleyicisi gereklidir.
Anlamsal yapılandırmaya ve zengin metin içeriğine sahip mevcut bir arama dizini. Bu kılavuzdaki örnekler, sorgu yeniden yazmayı göstermek için hotels-sample-index örnek verilerini kullanır. Sorgu yeniden yazmayı test etmek için kendi verilerinizi ve dizininizi kullanabilirsiniz.
REST API isteklerini destekleyen bir web istemcisine ihtiyacınız vardır. Bu kılavuzdaki örnekler, REST İstemci uzantısıyla Visual Studio Code ile test edilmiştir.
İpucu
Açıklama veya tanım içeren içerik, anlam derecelendirmesi için en iyi sonucu sağlar.
Sorgu yeniden yazmaları ile arama isteği oluşturma
Bu REST API örneğinde, isteği formüle etmek için Arama Belgeleri'ni kullanacağız. İstek ve yanıt özellikleri hakkında daha fazla bilgi için API başvurusu belgelerine bakın.
Aşağıdaki isteği bir web istemcisine şablon olarak yapıştırın.
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 }
yerine
search-service-name
arama hizmetinizin adını yazın.farklıysa değerini dizin adınızla değiştirirsiniz
hotels-sample-index
."Arama"yı tam metin arama sorgusuna ayarlıyoruz. Vektör sorguları belirtmediğiniz sürece, sorgu yeniden yazma işlemi için arama özelliği gereklidir. Vektör sorguları belirtirseniz, "arama" metni nesnenin özelliğiyle
"vectorQueries"
eşleşmelidir"text"
. Arama dizeniz basit söz dizimini veya tam Lucene söz dizimini destekleyebilir."semanticConfiguration" değerini dizininize eklenmiş önceden tanımlanmış bir semantik yapılandırmaya ayarladık.
"queryType" değerini "semantik" olarak ayarladık. "queryType" değerini "semantik" olarak ayarlamamız veya istekte var olmayan bir "semanticQuery" özelliği eklememiz gerekir. Sorgu yeniden yazma için anlam derecelendirmesi gereklidir.
En fazla beş sorgu yeniden yazması elde etmek için "queryRewrites" değerini "generative|count-5" olarak ayarladık. Sayıyı 1 ile 10 arasında herhangi bir değere ayarlayabilirsiniz.
"queryRewrites" özelliğini ayarlayarak sorgunun yeniden yazılmasını istediğimizden, "queryLanguage" öğesini arama metin diline ayarlamalıyız. Arama hizmeti, sorgu yeniden yazmaları için aynı dili kullanır. Bu örnekte "en-US" kullanıyoruz. Desteklenen yerel ayarlar şunlardır:
en-AU
,en-CA
,en-GB
, ,en-US
en-IN
,ar-EG
, ,ar-JO
,ar-MA
,ja-JP
sl-SL
sk-SK
ro-RO
ru-RU
pt-BR
pl-PL
pa-IN
no-NO
nl-NL
nl-BE
ms-MY
nb-NO
ms-BN
mr-IN
ml-IN
pt-PT
lv-LV
sr-BA
fr-FR
ga-IE
fr-CA
gl-ES
fi-FI
fa-AE
eu-ES
gu-IN
et-EE
es-MX
he-IL
sr-ME
hi-IN
hy-AM
is-IS
kn-IN
hr-BA
lt-LT
id-ID
ko-KR
it-IT
hr-HR
hu-HU
ar-KW
ar-SA
bg-BG
bn-IN
ca-ES
cs-CZ
da-DK
de-DE
el-GR
es-ES
sr-RS
,sv-SE
, ,ta-IN
,te-IN
,th-TH
,tr-TR
,uk-UA
, ,ur-PK
,vi-VN
zh-CN
,zh-TW
.Yanıtta sorgu yeniden yazmalarını almak için "debug" değerini "queryRewrites" olarak ayarladık.
İpucu
Yalnızca test amacıyla ayarlanır
"debug": "queryRewrites"
. Daha iyi performans için üretimde hata ayıklama kullanmayın.Yalnızca en üstteki arama sonucunu döndürmek için "top" değerini 1 olarak ayarladık.
Sorguyu yürütmek ve sonuçları döndürmek için isteği gönderin.
Ardından, sorgunun yeniden yazılmasının ardından arama sonuçlarını değerlendireceğiz.
Yanıtı değerlendirme
Aşağıda, sorgu yeniden yazmalarını içeren bir yanıt örneği verilmişti:
"@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
}
]
Dikkate almak için bazı önemli noktalar şunlardır:
- Test için "debug" özelliğini "queryRewrites" olarak ayarladığımız için yanıt, metin girişi sorgusu ve sorgu yeniden yazmaları içeren bir
@search.debug
nesne içerir. - "queryRewrites" özelliğini "generative|count-5" olarak ayarladığımız için yanıt en fazla beş sorgu yeniden yazması içerir.
"inputQuery"
Değer, sorgu yeniden yazma için oluşturucu modele gönderilen sorgudur. Giriş sorgusu her zaman kullanıcının"search"
sorgusuyla aynı değildir.
Burada, sorgu yeniden yazması olmayan bir yanıt örneği verilmiştır.
"@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
}
]
Sorgu yeniden yazma ile vektör sorguları
Anahtar sözcük arama ve vektör aramasını tek bir istekte ve birleşik yanıtta birleştirmek için arama isteğinize vektör sorguları ekleyebilirsiniz.
Burada, sorgu yeniden yazmaları içeren bir vektör sorgusu içeren bir sorgu örneği verilmiştır. Önceki bir örneği vektör sorgusu içerecek şekilde değiştiriyoruz.
- İsteğe bir "vectorQueries" nesnesi ekliyoruz. Bu nesne, "tür" değerinin "text" olarak ayarlandığı bir vektör sorgusu içerir.
- "text" değeri , "search" değeriyle aynıdır. Sorgu yeniden yazma işleminin çalışması için bu değerlerin aynı olması gerekir.
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
}
Yanıt, hem metin sorgusu hem de vektör sorgusu için sorgu yeniden yazmalarını içerir.
Hata ayıklama ile sorgu yeniden yazmalarını test edin
Sorgunuzun beklendiği gibi çalıştığından emin olmak için yeniden yazmalarınızı test etmelisiniz. Sorgunun "debug": "queryRewrites"
yanıtta yeniden yazılmasını sağlamak için sorgu isteğinizdeki özelliğini ayarlayın. Ayar "debug"
, test amacıyla isteğe bağlıdır. Daha iyi performans için bu özelliği üretimde ayarlamayın.
Kısmi yanıt nedenleri
Hata ayıklama (test) yanıtının ve vectors
özellikleri için boş bir dizi içerdiğini text.rewrites
gözlemleyebilirsiniz.
{
"@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
}
Yukarıdaki örnekte:
- Yanıt, "Geçici" değerine sahip bir özellik içerir
@search.semanticPartialResponseReason
. Bu ileti, sorgulardan en az birinin tamamlanamadı olduğu anlamına gelir. - Yanıt ayrıca "OriginalQueryOnly" değerine sahip bir özellik içerir
@search.semanticQueryRewriteResultType
. Bu ileti, sorgu yeniden yazmalarının kullanılamadığı anlamına gelir. Arama sonuçlarını almak için yalnızca özgün sorgu kullanılır.
Sonraki adımlar
Anlam derecelendirmesi, anahtar sözcük arama ve vektör aramasını tek bir istekte ve birleşik yanıtta birleştiren karma sorgularda kullanılabilir.