Menulis ulang kueri dengan peringkat semantik di Azure AI Search (Pratinjau)
Catatan
Fitur ini masih dalam pratinjau umum. Pratinjau ini disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas. Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.
Penulisan ulang kueri adalah proses mengubah kueri pengguna menjadi yang lebih efektif, menambahkan lebih banyak istilah dan menyempurnakan hasil pencarian. Layanan pencarian mengirimkan kueri pencarian (atau variasinya) ke model generatif yang menghasilkan kueri alternatif.
Penulisan ulang kueri meningkatkan hasil dari peringkat semantik dengan mengoreksi kesalahan ketik atau kesalahan ejaan dalam kueri pengguna, dan memperluas kueri dengan sinonim.
Cari dengan penulisan ulang kueri berfungsi seperti ini:
- Kueri pengguna dikirim melalui
search
properti dalam permintaan. - Layanan pencarian mengirimkan kueri pencarian (atau variasinya) ke model generatif yang menghasilkan kueri alternatif.
- Layanan pencarian menggunakan kueri asli dan kueri yang ditulis ulang untuk mengambil hasil pencarian.
Penulisan ulang kueri adalah fitur opsional. Tanpa penulisan ulang kueri, layanan pencarian hanya menggunakan kueri asli untuk mengambil hasil pencarian.
Catatan
Kueri yang ditulis ulang mungkin tidak berisi semua istilah yang tepat yang dimiliki kueri asli. Ini mungkin berdampak pada hasil pencarian jika kueri sangat spesifik dan diperlukan kecocokan yang tepat untuk pengidentifikasi unik atau kode produk.
Prasyarat
- Layanan pencarian, Tingkat dasar atau yang lebih tinggi.
Catatan
Penulisan ulang kueri saat ini tersedia di wilayah Eropa Utara, dan Asia Tenggara.
- Layanan pencarian Anda harus mengaktifkan ranker semantik. Tinjau peringkat semantik jika Anda memerlukan pengenalan fitur.
Penting
Peringkat semantik saat ini diperlukan untuk penulisan ulang kueri.
Indeks pencarian yang ada dengan konfigurasi semantik dan konten teks kaya. Contoh dalam panduan ini menggunakan data sampel hotel-sample-index untuk menunjukkan penulisan ulang kueri. Anda dapat menggunakan data dan indeks Anda sendiri untuk menguji penulisan ulang kueri.
Anda memerlukan klien web yang mendukung permintaan REST API. Contoh dalam panduan ini diuji dengan Visual Studio Code dengan ekstensi Klien REST.
Tip
Konten yang mencakup penjelasan atau definisi berfungsi paling baik untuk peringkat semantik.
Membuat permintaan pencarian dengan penulisan ulang kueri
Dalam contoh REST API ini, kami menggunakan Dokumen Pencarian untuk merumuskan permintaan. Untuk informasi selengkapnya tentang properti permintaan dan respons, lihat dokumentasi referensi API.
Tempelkan permintaan berikut ke klien web sebagai templat.
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 }
Anda mengganti
search-service-name
dengan nama layanan pencarian Anda.Anda mengganti
hotels-sample-index
dengan nama indeks Anda jika berbeda.Kami mengatur "pencarian" ke kueri pencarian teks lengkap. Properti pencarian diperlukan untuk penulisan ulang kueri, kecuali Anda menentukan kueri vektor. Jika Anda menentukan kueri vektor, maka teks "pencarian" harus cocok dengan
"text"
properti"vectorQueries"
objek. String pencarian Anda dapat mendukung sintaksis sederhana atau sintaks Lucene penuh.Kami mengatur "semanticConfiguration" ke konfigurasi semantik yang telah ditentukan sebelumnya yang disematkan dalam indeks Anda.
Kami mengatur "queryType" ke "semantik". Kita perlu mengatur "queryType" ke "semantik" atau menyertakan properti "semanticQuery" yang tidak ada dalam permintaan. Peringkat semantik diperlukan untuk penulisan ulang kueri.
Kami mengatur "queryRewrites" ke "generative|count-5" untuk mendapatkan hingga lima penulisan ulang kueri. Anda dapat mengatur hitungan ke nilai apa pun antara 1 dan 10.
Karena kami meminta penulisan ulang kueri dengan mengatur properti "queryRewrites", kita harus mengatur "queryLanguage" ke bahasa teks pencarian. layanan Pencarian menggunakan bahasa yang sama untuk penulisan ulang kueri. Dalam contoh ini, kami menggunakan "en-US". Lokal yang didukung adalah:
en-AU
, ,en-CA
,en-GB
,en-IN
en-US
,it-IT
sr-BA
is-IS
ro-RO
sl-SL
hy-AM
pt-BR
sk-SK
hu-HU
pa-IN
ru-RU
hr-BA
nl-NL
pt-PT
hi-IN
nb-NO
pl-PL
gu-IN
ms-BN
no-NO
gl-ES
ml-IN
nl-BE
fr-FR
lt-LT
ms-MY
mr-IN
lv-LV
kn-IN
ko-KR
ja-JP
hr-HR
id-ID
he-IL
fr-CA
ga-IE
fi-FI
eu-ES
fa-AE
et-EE
es-ES
es-MX
el-GR
de-DE
ar-EG
da-DK
cs-CZ
ar-JO
ca-ES
bn-IN
ar-MA
ar-KW
ar-SA
bg-BG
,sr-ME
sr-RS
, ,sv-SE
,te-IN
ta-IN
,th-TH
,tr-TR
,uk-UA
,ur-PK
,vi-VN
, ,zh-CN
,zh-TW
.Kami mengatur "debug" ke "queryRewrites" untuk mendapatkan penulisan ulang kueri dalam respons.
Tip
Hanya diatur
"debug": "queryRewrites"
untuk tujuan pengujian. Untuk performa yang lebih baik, jangan gunakan debug dalam produksi.Kami mengatur "atas" ke 1 untuk mengembalikan hanya hasil pencarian teratas.
Kirim permintaan untuk menjalankan kueri dan mengembalikan hasil.
Selanjutnya, kami mengevaluasi hasil pencarian dengan penulisan ulang kueri.
Mengevaluasi respons
Berikut adalah contoh respons yang menyertakan penulisan ulang kueri:
"@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
}
]
Berikut adalah beberapa poin penting yang perlu diperhatikan:
- Karena kami mengatur properti "debug" ke "queryRewrites" untuk pengujian, respons menyertakan
@search.debug
objek dengan kueri input teks dan penulisan ulang kueri. - Karena kami mengatur properti "queryRewrites" ke "generative|count-5", respons mencakup hingga lima penulisan ulang kueri.
- Nilainya
"inputQuery"
adalah kueri yang dikirim ke model generatif untuk penulisan ulang kueri. Kueri input tidak selalu sama dengan kueri pengguna"search"
.
Berikut adalah contoh respons tanpa penulisan ulang kueri.
"@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
}
]
Kueri vektor dengan penulisan ulang kueri
Anda dapat menyertakan kueri vektor dalam permintaan pencarian Anda untuk menggabungkan pencarian kata kunci dan pencarian vektor ke dalam satu permintaan dan respons terpadu.
Berikut adalah contoh kueri yang menyertakan kueri vektor dengan penulisan ulang kueri. Kami memodifikasi contoh sebelumnya untuk menyertakan kueri vektor.
- Kami menambahkan objek "vectorQueries" ke permintaan. Objek ini mencakup kueri vektor dengan "jenis" diatur ke "teks".
- Nilai "teks" sama dengan nilai "pencarian". Nilai-nilai ini harus identik agar penulisan ulang kueri berfungsi.
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
}
Respons mencakup penulisan ulang kueri untuk kueri teks dan kueri vektor.
Uji penulisan ulang kueri dengan debug
Anda harus menguji penulisan ulang kueri Anda untuk memastikan bahwa kueri berfungsi seperti yang diharapkan. Atur "debug": "queryRewrites"
properti dalam permintaan kueri Anda untuk mendapatkan penulisan ulang kueri dalam respons. Pengaturan "debug"
bersifat opsional untuk tujuan pengujian. Untuk performa yang lebih baik, jangan atur properti ini dalam produksi.
Alasan respons parsial
Anda mungkin mengamati bahwa respons debug (pengujian) menyertakan array kosong untuk text.rewrites
properti dan vectors
.
{
"@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
}
Dalam contoh sebelumnya:
- Respons mencakup
@search.semanticPartialResponseReason
properti dengan nilai "Sementara". Pesan ini berarti bahwa setidaknya salah satu kueri gagal diselesaikan. - Respons juga mencakup
@search.semanticQueryRewriteResultType
properti dengan nilai "OriginalQueryOnly". Pesan ini berarti bahwa penulisan ulang kueri tidak tersedia. Hanya kueri asli yang digunakan untuk mengambil hasil pencarian.
Langkah berikutnya
Peringkat semantik dapat digunakan dalam kueri hibrid yang menggabungkan pencarian kata kunci dan pencarian vektor ke dalam satu permintaan dan respons terpadu.