Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan
Pencarian Azure AI tersedia melalui portal Azure, REST API, dan Azure SDK. Ini juga mendukung Foundry IQ, lapisan pengetahuan terkelola yang mengubah konten perusahaan menjadi pangkalan pengetahuan yang dapat digunakan kembali dan sadar izin untuk agen di portal Microsoft Foundry.
Dalam panduan mulai cepat ini, Anda menambahkan pemeringkatan semantik ke indeks Pencarian Azure AI yang sudah ada dan menjalankan kueri semantik untuk meningkatkan relevansi hasil. Gunakan tab bahasa untuk memilih alur kerja SDK atau REST pilihan Anda.
Dalam panduan memulai cepat ini, Anda menggunakan pustaka klien Pencarian Azure AI untuk .NET untuk menambahkan peringkat semantik ke indeks pencarian yang ada dan melakukan pencarian pada indeks.
Peringkat semantik adalah fungsionalitas sisi kueri yang menggunakan pemahaman pembacaan mesin untuk mengodekan ulang hasil pencarian, mempromosikan kecocokan yang paling relevan secara semantik ke bagian atas daftar. Anda dapat menambahkan konfigurasi semantik ke indeks yang ada tanpa persyaratan pembangunan ulang. Peringkat semantik paling efektif untuk teks informasi atau deskriptif.
Tips
Ingin segera memulai? Unduh kode source di GitHub.
Prasyarat
Akun Azure dengan langganan aktif. Buat akun secara gratis.
Layanan Pencarian Azure AI.
Indeks dengan bidang teks deskriptif yang dikaitkan sebagai
searchabledanretrievable. Mulai cepat ini mengasumsikan indeks sampel hotel..NET 9 atau yang lebih baru.
Git untuk mengkloning repositori sampel.
Azure CLI untuk autentikasi tanpa kunci dengan Microsoft Entra ID.
Mengonfigurasi akses
Sebelum memulai, pastikan Anda memiliki izin untuk mengakses konten dan operasi di Pencarian Azure AI. Mulai cepat ini menggunakan Microsoft Entra ID untuk autentikasi dan akses berbasis peran untuk otorisasi. Anda harus menjadi Pemilik atau Administrator Akses Pengguna untuk menetapkan peran. Jika peran tidak dapat dilakukan, gunakan autentikasi berbasis kunci sebagai gantinya.
Untuk mengonfigurasi akses berbasis peran yang direkomendasikan:
Aktifkan akses berbasis peran untuk layanan pencarian Anda.
Tetapkan peran berikut ke akun pengguna Anda.
Kontributor Layanan Pencarian
Pembaca Indeks Data Pencarian
Catatan
Tidak seperti panduan cepat lain yang membuat dan memuat indeks, panduan cepat ini menggunakan indeks yang sudah ada dan sudah berisi data, sehingga Anda tidak memerlukan peran Kontributor Data Indeks Pencarian.
Dapatkan titik akhir
Setiap layanan Pencarian Azure AI memiliki endpoint, yang merupakan URL unik yang mengidentifikasi dan menyediakan akses jaringan ke layanan. Di bagian selanjutnya, Anda menentukan titik akhir ini untuk menyambungkan ke layanan pencarian Anda secara terprogram.
Untuk mendapatkan titik akhir:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilih Gambaran Umum.
Catat titik akhir, yang akan terlihat seperti
https://my-service.search.windows.net.
Mulai dengan indeks
Langkah cepat ini memodifikasi indeks yang ada untuk menyertakan konfigurasi semantik. Kami merekomendasikan indeks contoh hotel, yang dapat Anda buat dalam hitungan menit menggunakan wizard di portal Azure.
Untuk menggunakan indeks yang berbeda, ganti nama indeks, nama bidang dalam konfigurasi semantik, dan nama bidang dalam pernyataan kueri select di seluruh kode sampel. Indeks Anda harus berisi bidang teks deskriptif yang dikaitkan sebagai searchable dan retrievable.
Untuk meninjau dan menjalankan kueri pada indeks sampel hotel sebelum pengurutan semantik:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilihIndeks> pencarian.
Pilih hotel-sampel.
Pilih Konfigurasi semantik untuk melihat konfigurasi yang ada. Jika Anda mengaktifkan peringkat semantik selama alur pembuatan wizard, harus ada konfigurasi default.
Pilih Penjelajah pencarian, lalu pilih Tampilkan>tampilan JSON.
Tempelkan JSON berikut ke editor kueri.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Pilih Cari untuk menjalankan kueri.
Responsnya harus mirip dengan contoh berikut. Ini adalah kueri teks lengkap yang diberi peringkat oleh BM25, sehingga hasilnya cocok pada istilah kueri individual dan varian linguistik daripada arti keseluruhan kueri. Misalnya,
walkingmencocokkanwalk, danlivemencocokkanmusicsecara independen daripada sebagai frasa."@odata.count": 30, "value": [ { "@search.score": 5.004435, "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tips
Kueri ini memperlihatkan tampilan respons sebelum peringkat semantik diterapkan. Setelah Anda mengonfigurasi konfigurasi semantik, tambahkan
"queryType": "semantic"dan"semanticConfiguration": "semantic-config"untuk melihat bagaimana kueri yang sama diberi peringkat berbeda dengan peringkat semantik.
Siapkan lingkungan
Gunakan Git untuk mengkloning repositori sampel.
git clone https://github.com/Azure-Samples/azure-search-dotnet-samplesMasuk ke folder panduan mulai cepat.
cd azure-search-dotnet-samples/quickstart-semantic-rankingDi
BuildIndex/Program.cs, ganti nilai tempat penampung untukendpointdengan URL yang Anda peroleh di Dapatkan titik akhir.Ulangi langkah sebelumnya untuk
QueryIndex/Program.cs.Untuk autentikasi tanpa kunci dengan Microsoft Entra ID, masuk ke akun Azure Anda. Jika Anda memiliki beberapa langganan, pilih langganan yang berisi layanan Pencarian Azure AI Anda.
az login
Jalankan kode
Jalankan proyek pertama untuk memperbarui indeks dengan konfigurasi semantik.
dotnet run --project BuildIndexJalankan proyek kedua untuk mengkueri indeks. Tekan Enter di antara kueri untuk melihat perkembangan dari kueri sederhana ke kueri semantik dengan keterangan dan jawaban.
dotnet run --project QueryIndex
Keluaran
Proyek pertama memperbarui indeks sampel hotel dengan konfigurasi semantik. Output mencakup konfirmasi konfigurasi semantik.
Here's a list of all indexes on the search service. You should see hotels-sample:
hotels-sample
Added new semantic configuration 'semantic-config' to the index definition.
Index updated successfully.
Here is the revised index definition:
{
"Name": "hotels-sample",
... // Trimmed for brevity
"SemanticSearch": {
"DefaultConfigurationName": "semantic-config",
"Configurations": [
{
"Name": "hotels-sample-semantic-configuration",
... // Trimmed for brevity
},
{
"Name": "semantic-config",
"PrioritizedFields": {
"TitleField": {
"FieldName": "HotelName"
},
"ContentFields": [
{
"FieldName": "Description"
}
],
"KeywordsFields": [
{
"FieldName": "Tags"
}
]
},
"RankingOrder": {}
}
]
}
}
Proyek kedua menjalankan empat kueri. Output mencakup hasil pencarian dengan skor relevansi, keterangan, dan jawaban.
Query 1: Simple query using the search string 'walking distance to live music'.
HotelId: 2
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
@search.score: 5.004435
----------------------------------------
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
@search.score: 4.555706
----------------------------------------
... // Trimmed for brevity
Press Enter to continue to the next query...
Query 2: Semantic query (no captions, no answers) for 'walking distance to live music'.
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
@search.score: 4.555706
@search.rerankerScore: 2.613231658935547
----------------------------------------
HotelId: 2
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
@search.score: 5.004435
@search.rerankerScore: 2.271434783935547
----------------------------------------
... // Trimmed for brevity
Press Enter to continue to the next query...
Query 3: Semantic query with captions.
Caption: Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and then head over to<em> Benaroya Hall </em>to catch the evening's concert performance.
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
@search.score: 4.555706
@search.rerankerScore: 2.613231658935547
----------------------------------------
... // Trimmed for brevity
Press Enter to continue to the next query...
Query 4: Semantic query with a verbatim answer from the Description field for 'what's a good hotel for people who like to read'.
Extractive Answers:
Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
----------------------------------------
... // Trimmed for brevity
Memahami kode
Catatan
Cuplikan kode di bagian ini mungkin telah dimodifikasi untuk keterbacaan. Untuk contoh kerja lengkap, lihat kode sumber.
Sekarang setelah Anda menjalankan kode, mari kita uraikan langkah-langkah kunci:
- Konfigurasi dan autentikasi
- Memperbarui indeks dengan konfigurasi semantik
- Menjalankan kueri pada indeks
Konfigurasi dan autentikasi
Kedua proyek memiliki pola konfigurasi yang sama. File Program.cs menentukan titik akhir pencarian dan menggunakan DefaultAzureCredential untuk autentikasi tanpa kunci.
var endpoint = new Uri("PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE");
var credential = new DefaultAzureCredential();
var indexClient = new SearchIndexClient(endpoint, credential);
Poin-poin penting:
-
DefaultAzureCredentialmenyediakan autentikasi tanpa kunci menggunakan Microsoft Entra ID. Ini menautkan beberapa jenis kredensial, termasuk kredensial Azure CLI dariaz login. -
SearchIndexClientmengelola operasi tingkat indeks, seperti memperbarui skema indeks. -
SearchClientmenangani operasi tingkat dokumen, seperti mengkueri indeks.
Memperbarui indeks dengan konfigurasi semantik
Kode berikut dalam BuildIndex/Program.cs menambahkan konfigurasi semantik ke indeks yang ada. Operasi ini tidak menghapus dokumen pencarian apa pun, dan indeks Anda tetap beroperasi setelah konfigurasi ditambahkan.
static void AddSemanticConfiguration(
SearchIndex index,
string semanticConfigName)
{
if (index.SemanticSearch == null)
{
index.SemanticSearch = new SemanticSearch();
}
var configs = index.SemanticSearch.Configurations;
if (!configs.Any(c => c.Name == semanticConfigName))
{
var prioritizedFields =
new SemanticPrioritizedFields
{
TitleField = new SemanticField("HotelName"),
ContentFields =
{
new SemanticField("Description")
},
KeywordsFields =
{
new SemanticField("Tags")
}
};
configs.Add(
new SemanticConfiguration(
semanticConfigName,
prioritizedFields
)
);
}
index.SemanticSearch.DefaultConfigurationName =
semanticConfigName;
}
Poin-poin penting:
- Konfigurasi semantik menentukan bidang yang digunakan untuk peringkat semantik.
- Konfigurasi semantik dapat ditambahkan ke indeks yang ada tanpa membangun kembali.
-
TitleFieldmengatur bidang yang mewakili judul dokumen. -
ContentFieldsmengatur bidang yang berisi konten utama. -
KeywordsFieldsmengatur bidang yang berisi kata kunci atau tag.
Melakukan kueri pada indeks
Proyek ini QueryIndex menjalankan empat kueri secara berurutan, berkembang dari pencarian kata kunci sederhana ke peringkat semantik dengan keterangan dan jawaban.
Kueri sederhana
Kueri pertama adalah pencarian kata kunci sederhana yang tidak menggunakan peringkat semantik. Kueri ini berfungsi sebagai garis besar untuk membandingkan hasil dengan dan tanpa reranking semantik.
await RunQuery(client, searchText, new SearchOptions
{
Size = 5,
QueryType = SearchQueryType.Simple,
IncludeTotalCount = true,
Select = { "HotelId", "HotelName", "Description" }
});
Poin-poin penting:
-
SearchQueryType.Simplemenggunakan algoritma peringkat BM25 default. - Hasil diberi peringkat berdasarkan relevansi kata kunci (
@search.score) saja.
Kueri semantik (tanpa keterangan, tidak ada jawaban)
Kueri berikutnya menambahkan peringkat semantik tanpa keterangan atau jawaban. Kode berikut menunjukkan persyaratan minimum untuk memanggil peringkat semantik.
var semanticOptions = new SearchOptions
{
Size = 5,
QueryType = SearchQueryType.Semantic,
SemanticSearch = new SemanticSearchOptions
{
SemanticConfigurationName = "semantic-config"
},
IncludeTotalCount = true,
Select =
{
"HotelId", "HotelName", "Description"
}
};
await RunQuery(client, searchText, semanticOptions);
Poin-poin penting:
-
SearchQueryType.Semanticmengaktifkan peringkat semantik pada kueri. -
SemanticConfigurationNamemenentukan konfigurasi semantik mana yang akan digunakan. -
@search.rerankerScoremenunjukkan relevansi semantik (lebih tinggi lebih baik). - Hasil awal dari kueri istilah diberi skor ulang menggunakan model peringkat semantik. Untuk himpunan data dan kueri ini, efek peringkat semantik lebih jelas dalam hasil berpangkat lebih rendah.
Kueri semantik dengan keterangan
Kode berikut menambahkan keterangan teks untuk menyoroti bagian yang paling relevan dari setiap hasil, dengan penyorotan istilah dan frasa penting.
var captionsOptions = new SearchOptions
{
Size = 5,
QueryType = SearchQueryType.Semantic,
SemanticSearch = new SemanticSearchOptions
{
SemanticConfigurationName = "semantic-config",
QueryCaption =
new QueryCaption(QueryCaptionType.Extractive)
{
HighlightEnabled = true
}
},
IncludeTotalCount = true,
Select =
{
"HotelId", "HotelName", "Description"
}
};
captionsOptions.HighlightFields.Add("Description");
await RunQuery(
client, searchText, captionsOptions, showCaptions: true
);
Poin-poin penting:
-
QueryCaptionmengaktifkan keterangan ekstraktif dari bidang konten. - Keterangan menampilkan bagian yang paling relevan dan menambahkan
<em>tag di sekitar istilah penting.
Kueri semantik dengan jawaban
Kueri akhir menambahkan jawaban semantik. Kueri ini menggunakan string pencarian yang berbeda (searchText2) karena jawaban semantik berfungsi paling baik saat kueri diungkapkan sebagai pertanyaan. Jawabannya adalah kutipan verbatim yang diekstrak dari indeks Anda, bukan respons yang dibentuk oleh model penyelesaian obrolan.
Kueri dan konten terindeks harus diratakan erat agar jawaban dikembalikan. Jika tidak ada kandidat yang memenuhi ambang keyakinan, respons tidak menyertakan jawaban. Contoh ini menggunakan pertanyaan yang diketahui menghasilkan hasil sehingga Anda dapat melihat sintaksnya. Jika jawaban tidak berguna untuk skenario Anda, hilangkan QueryAnswer dari kode Anda. Untuk jawaban yang terstruktur, pertimbangkan pola RAG atau pengambilan informasi secara agenik.
var answersOptions = new SearchOptions
{
Size = 5,
QueryType = SearchQueryType.Semantic,
SemanticSearch = new SemanticSearchOptions
{
SemanticConfigurationName = "semantic-config",
QueryAnswer =
new QueryAnswer(QueryAnswerType.Extractive)
},
IncludeTotalCount = true,
Select =
{
"HotelId", "HotelName", "Description"
}
};
await RunQuery(
client, searchText2, answersOptions, showAnswers: true
);
Poin-poin penting:
-
QueryAnswermemungkinkan jawaban ekstraktif untuk kueri yang menyerupai pertanyaan. - Jawabannya adalah konten verbatim yang diekstrak dari indeks Anda, bukan teks yang dihasilkan.
Dalam panduan cepat ini, Anda menggunakan pustaka klien Pencarian Azure AI untuk Java untuk menerapkan peringkat semantik ke indeks pencarian yang ada dan melakukan kueri pada indeks tersebut.
Peringkat semantik adalah fungsionalitas sisi kueri yang menggunakan pemahaman pembacaan mesin untuk mengodekan ulang hasil pencarian, mempromosikan kecocokan yang paling relevan secara semantik ke bagian atas daftar. Anda dapat menambahkan konfigurasi semantik ke indeks yang ada tanpa persyaratan pembangunan ulang. Peringkat semantik paling efektif untuk teks informasi atau deskriptif.
Tips
Ingin segera memulai? Unduh kode source di GitHub.
Prasyarat
Akun Azure dengan langganan aktif. Buat akun secara gratis.
Layanan Pencarian Azure AI.
Indeks dengan bidang teks deskriptif yang dikaitkan sebagai
searchabledanretrievable. Mulai cepat ini mengasumsikan indeks sampel hotel.Java 21 (LTS) dan Maven.
Git untuk mengkloning repositori sampel.
Azure CLI untuk autentikasi tanpa kunci dengan Microsoft Entra ID.
Mengonfigurasi akses
Sebelum memulai, pastikan Anda memiliki izin untuk mengakses konten dan operasi di Pencarian Azure AI. Mulai cepat ini menggunakan Microsoft Entra ID untuk autentikasi dan akses berbasis peran untuk otorisasi. Anda harus menjadi Pemilik atau Administrator Akses Pengguna untuk menetapkan peran. Jika peran tidak dapat dilakukan, gunakan autentikasi berbasis kunci sebagai gantinya.
Untuk mengonfigurasi akses berbasis peran yang direkomendasikan:
Aktifkan akses berbasis peran untuk layanan pencarian Anda.
Tetapkan peran berikut ke akun pengguna Anda.
Kontributor Layanan Pencarian
Pembaca Indeks Data Pencarian
Catatan
Tidak seperti panduan cepat lain yang membuat dan memuat indeks, panduan cepat ini menggunakan indeks yang sudah ada dan sudah berisi data, sehingga Anda tidak memerlukan peran Kontributor Data Indeks Pencarian.
Dapatkan titik akhir
Setiap layanan Pencarian Azure AI memiliki endpoint, yang merupakan URL unik yang mengidentifikasi dan menyediakan akses jaringan ke layanan. Di bagian selanjutnya, Anda menentukan titik akhir ini untuk menyambungkan ke layanan pencarian Anda secara terprogram.
Untuk mendapatkan titik akhir:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilih Gambaran Umum.
Catat titik akhir, yang akan terlihat seperti
https://my-service.search.windows.net.
Mulai dengan indeks
Langkah cepat ini memodifikasi indeks yang ada untuk menyertakan konfigurasi semantik. Kami merekomendasikan indeks contoh hotel, yang dapat Anda buat dalam hitungan menit menggunakan wizard di portal Azure.
Untuk menggunakan indeks yang berbeda, ganti nama indeks, nama bidang dalam konfigurasi semantik, dan nama bidang dalam pernyataan kueri select di seluruh kode sampel. Indeks Anda harus berisi bidang teks deskriptif yang dikaitkan sebagai searchable dan retrievable.
Untuk meninjau dan menjalankan kueri pada indeks sampel hotel sebelum pengurutan semantik:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilihIndeks> pencarian.
Pilih hotel-sampel.
Pilih Konfigurasi semantik untuk melihat konfigurasi yang ada. Jika Anda mengaktifkan peringkat semantik selama alur pembuatan wizard, harus ada konfigurasi default.
Pilih Penjelajah pencarian, lalu pilih Tampilkan>tampilan JSON.
Tempelkan JSON berikut ke editor kueri.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Pilih Cari untuk menjalankan kueri.
Responsnya harus mirip dengan contoh berikut. Ini adalah kueri teks lengkap yang diberi peringkat oleh BM25, sehingga hasilnya cocok pada istilah kueri individual dan varian linguistik daripada arti keseluruhan kueri. Misalnya,
walkingmencocokkanwalk, danlivemencocokkanmusicsecara independen daripada sebagai frasa."@odata.count": 30, "value": [ { "@search.score": 5.004435, "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tips
Kueri ini memperlihatkan tampilan respons sebelum peringkat semantik diterapkan. Setelah Anda mengonfigurasi konfigurasi semantik, tambahkan
"queryType": "semantic"dan"semanticConfiguration": "semantic-config"untuk melihat bagaimana kueri yang sama diberi peringkat berbeda dengan peringkat semantik.
Siapkan lingkungan
Gunakan Git untuk mengkloning repositori sampel.
git clone https://github.com/Azure-Samples/azure-search-java-samplesMasuk ke folder panduan mulai cepat.
cd azure-search-java-samples/quickstart-semantic-rankingDi
src/main/resources/application.properties, ganti nilai tempat penampung untukazure.search.endpointdengan URL yang Anda peroleh di Dapatkan titik akhir.Kompilasi proyek ini untuk menyelesaikan dependensi, termasuk azure-search-documents.
mvn compileSaat build selesai, verifikasi bahwa tidak ada kesalahan yang muncul dalam output.
Untuk autentikasi tanpa kunci dengan Microsoft Entra ID, masuk ke akun Azure Anda. Jika Anda memiliki beberapa langganan, pilih langganan yang berisi layanan Pencarian Azure AI Anda.
az login
Jalankan kode
Dapatkan pengaturan indeks yang ada.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.GetIndexSettings"Perbarui indeks dengan konfigurasi semantik.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.UpdateIndexSettings"Jalankan kueri semantik.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.SemanticQuery"Jalankan kueri semantik dengan keterangan.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.SemanticQueryWithCaptions"Jalankan kueri semantik dengan jawaban.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.SemanticAnswer"
Keluaran
Outputnya GetIndexSettings.java adalah nama indeks, bidangnya, dan konfigurasi semantiknya. Sebelum Anda menambahkan konfigurasi baru, indeks hanya memiliki konfigurasi default.
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: true
Field: HotelName, Type: Edm.String, Searchable: true
Field: Description, Type: Edm.String, Searchable: true
// Trimmed for brevity
Semantic search configurations: 1
Configuration name: hotels-sample-semantic-configuration
Output mencantumkan UpdateIndexSettings.java semua konfigurasi semantik pada indeks, termasuk yang ditambahkan kode, diikuti dengan pesan keberhasilan.
// Trimmed for brevity
Configuration name: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
----------------------------------------
Semantic configuration updated successfully.
Output dari SemanticQuery.java mengembalikan semua dokumen yang cocok dan diurutkan berdasarkan skor penyusun ulang peringkat semantik.
Search result #1:
Re-ranker Score: 2.61
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
Search result #2:
Re-ranker Score: 2.27
HotelId: 2
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
Search result #3:
Re-ranker Score: 1.99
HotelId: 4
HotelName: Sublime Palace Hotel
Description: Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience.
// Trimmed for brevity
Output SemanticQueryWithCaptions.java menambahkan elemen teks keterangan dengan sorotan hasil di samping bidang pencarian. Keterangan adalah bagian yang paling relevan dalam hasilnya. Jika indeks Anda menyertakan teks yang lebih besar, keterangan membantu mengekstrak kalimat yang paling menarik.
Search result #1:
Re-ranker Score: 2.61
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
Caption with highlights: Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and then head over to<em> Benaroya Hall </em>to catch the evening's concert performance.
------------------------------------------------------------
Search result #2:
Re-ranker Score: 2.27
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
Caption text: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live.
------------------------------------------------------------
// Trimmed for brevity
Output dari SemanticAnswer.java mencakup jawaban semantik yang ditarik dari salah satu hasil yang paling cocok dengan pertanyaan, diikuti dengan hasil pencarian dengan caption.
Semantic answer result #1:
Semantic Answer: Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
Semantic Answer Score: 0.98
Search Results:
Search result #1:
Re-ranker Score: 2.12
Hotel: Stay-Kay City Hotel
Description: This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
Caption: This classic hotel is<em> fully-refurbished </em>and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
Search result #2:
Re-ranker Score: 2.07
Hotel: Double Sanctuary Resort
Description: 5 star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.
Caption: <em>5 star Luxury Hotel </em>-<em> Biggest </em>Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.
// Trimmed for brevity
Memahami kode
Catatan
Cuplikan kode di bagian ini mungkin telah dimodifikasi untuk keterbacaan. Untuk contoh kerja lengkap, lihat kode sumber.
Sekarang setelah Anda menjalankan kode, mari kita uraikan langkah-langkah kunci:
- Konfigurasi dan autentikasi
- Memperbarui indeks dengan konfigurasi semantik
- Menjalankan kueri pada indeks
Konfigurasi dan autentikasi
Kelas SearchConfig.java memuat properti dari application.properties dan membuat satu DefaultAzureCredential untuk autentikasi tanpa kunci.
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class SearchConfig {
private static final Properties properties =
new Properties();
static {
try (InputStream input = SearchConfig.class
.getClassLoader()
.getResourceAsStream(
"application.properties")) {
properties.load(input);
} catch (IOException e) {
throw new RuntimeException(
"Failed to load application.properties",
e);
}
}
public static final String SEARCH_ENDPOINT =
properties.getProperty(
"azure.search.endpoint");
public static final String INDEX_NAME =
properties.getProperty(
"azure.search.index.name");
public static final String SEMANTIC_CONFIG_NAME =
properties.getProperty(
"semantic.configuration.name");
public static final DefaultAzureCredential
CREDENTIAL = new DefaultAzureCredentialBuilder()
.build();
}
Poin-poin penting:
-
DefaultAzureCredentialmenyediakan autentikasi tanpa kunci menggunakan Microsoft Entra ID. Ini menautkan beberapa jenis kredensial, termasuk kredensial Azure CLI dariaz login. - Properti dimuat dari
application.propertiesfile di classpath. - Bidang statis (
SEARCH_ENDPOINT,INDEX_NAME,SEMANTIC_CONFIG_NAME, )CREDENTIALdibagikan di semua kelas dalam proyek.
Memperbarui indeks dengan konfigurasi semantik
Kelas UpdateIndexSettings.java menambahkan konfigurasi semantik ke indeks yang hotels-sample ada. Operasi ini tidak menghapus dokumen pencarian apa pun, dan indeks Anda tetap beroperasi setelah konfigurasi ditambahkan.
import com.azure.search.documents.indexes
.SearchIndexClientBuilder;
import com.azure.search.documents.indexes.models
.SearchIndex;
import com.azure.search.documents.indexes.models
.SemanticConfiguration;
import com.azure.search.documents.indexes.models
.SemanticField;
import com.azure.search.documents.indexes.models
.SemanticPrioritizedFields;
import com.azure.search.documents.indexes.models
.SemanticSearch;
import java.util.ArrayList;
import java.util.List;
var indexClient = new SearchIndexClientBuilder()
.endpoint(SearchConfig.SEARCH_ENDPOINT)
.credential(SearchConfig.CREDENTIAL)
.buildClient();
SearchIndex existingIndex =
indexClient.getIndex(SearchConfig.INDEX_NAME);
var prioritizedFields =
new SemanticPrioritizedFields()
.setTitleField(
new SemanticField("HotelName"))
.setKeywordsFields(
List.of(new SemanticField("Tags")))
.setContentFields(
List.of(
new SemanticField("Description")));
var newSemanticConfiguration =
new SemanticConfiguration(
SearchConfig.SEMANTIC_CONFIG_NAME,
prioritizedFields);
SemanticSearch semanticSearch =
existingIndex.getSemanticSearch();
if (semanticSearch == null) {
semanticSearch = new SemanticSearch();
existingIndex.setSemanticSearch(semanticSearch);
}
List<SemanticConfiguration> configurations =
semanticSearch.getConfigurations();
if (configurations == null) {
configurations = new ArrayList<>();
semanticSearch.setConfigurations(configurations);
}
configurations.add(newSemanticConfiguration);
indexClient.createOrUpdateIndex(existingIndex);
Poin-poin penting:
-
SemanticPrioritizedFieldsmenentukan bidang mana yang dievaluasi oleh ranker semantik.setTitleFieldmengatur judul dokumen,setContentFieldsmengatur konten utama, dansetKeywordsFieldsmengatur kata kunci atau bidang tag. -
SemanticConfigurationmemasangkan nama dengan bidang yang diprioritaskan, mengidentifikasi konfigurasi semantik mana yang akan digunakan pada waktu kueri. -
createOrUpdateIndexmendorong skema yang diperbarui ke layanan pencarian tanpa membangun kembali indeks atau menghapus dokumen.
Melakukan kueri pada indeks
Tiga kelas berikut mengkueri indeks secara berurutan, berkembang dari pencarian semantik dasar ke peringkat semantik dengan keterangan dan jawaban.
Kueri semantik (tanpa keterangan, tidak ada jawaban)
Kueri pertama menambahkan peringkat semantik tanpa keterangan atau jawaban. Kelas SemanticQuery.java menunjukkan persyaratan minimum untuk memanggil peringkat semantik.
import com.azure.search.documents
.SearchClientBuilder;
import com.azure.search.documents.SearchDocument;
import com.azure.search.documents.models.QueryType;
import com.azure.search.documents.models.SearchOptions;
import com.azure.search.documents.models.SearchResult;
import com.azure.search.documents.models
.SemanticSearchOptions;
import com.azure.search.documents.util
.SearchPagedIterable;
var searchClient = new SearchClientBuilder()
.endpoint(SearchConfig.SEARCH_ENDPOINT)
.indexName(SearchConfig.INDEX_NAME)
.credential(SearchConfig.CREDENTIAL)
.buildClient();
var searchOptions = new SearchOptions()
.setQueryType(QueryType.SEMANTIC)
.setSemanticSearchOptions(
new SemanticSearchOptions()
.setSemanticConfigurationName(
SearchConfig.SEMANTIC_CONFIG_NAME))
.setSelect("HotelId", "HotelName", "Description");
SearchPagedIterable results = searchClient.search(
"walking distance to live music",
searchOptions, null);
for (SearchResult result : results) {
var document = result.getDocument(
SearchDocument.class);
double rerankerScore = result
.getSemanticSearch().getRerankerScore();
System.out.printf("Re-ranker Score: %.2f%n",
rerankerScore);
System.out.printf("HotelName: %s%n",
document.get("HotelName"));
System.out.printf("Description: %s%n%n",
document.get("Description"));
}
Poin-poin penting:
-
QueryType.SEMANTICmengaktifkan peringkat semantik pada kueri. -
setSemanticConfigurationNamemenentukan konfigurasi semantik mana yang akan digunakan. -
SearchPagedIterablemenyediakan iterasi dari hasil yang telah diurutkan ulang. Masing-masingSearchResultberisigetSemanticSearch()aksesor untuk skor reranker.
Kueri semantik dengan keterangan
Kelas SemanticQueryWithCaptions.java menambahkan teks penjelas untuk mengekstrak bagian yang paling relevan dari setiap hasil, dengan penyorotan kata kunci diterapkan pada istilah serta frasa penting.
import com.azure.search.documents.models
.QueryCaption;
import com.azure.search.documents.models
.QueryCaptionResult;
import com.azure.search.documents.models
.QueryCaptionType;
var searchOptions = new SearchOptions()
.setQueryType(QueryType.SEMANTIC)
.setSemanticSearchOptions(
new SemanticSearchOptions()
.setSemanticConfigurationName(
SearchConfig.SEMANTIC_CONFIG_NAME)
.setQueryCaption(
new QueryCaption(
QueryCaptionType.EXTRACTIVE)
.setHighlightEnabled(true)))
.setSelect(
"HotelId", "HotelName", "Description");
SearchPagedIterable results = searchClient.search(
"walking distance to live music",
searchOptions, null);
for (SearchResult result : results) {
List<QueryCaptionResult> captions =
result.getSemanticSearch()
.getQueryCaptions();
if (captions != null && !captions.isEmpty()) {
QueryCaptionResult caption = captions.get(0);
if (caption.getHighlights() != null) {
System.out.printf(
"Caption: %s%n",
caption.getHighlights());
}
}
}
Poin-poin penting:
-
QueryCaption(QueryCaptionType.EXTRACTIVE)mengaktifkan keterangan ekstraktif dari bidang konten. -
setHighlightEnabled(true)<em>menambahkan tag di sekitar istilah penting dalam keterangan. - Masing-masing
SearchResultmenyediakangetQueryCaptions()aksesor pencarian semantik.
Kueri semantik dengan jawaban
Kelas SemanticAnswer.java menambahkan jawaban semantik. Kelas ini menggunakan pertanyaan sebagai teks pencarian karena jawaban semantik berfungsi paling baik saat kueri diungkapkan sebagai pertanyaan. Jawabannya adalah kutipan verbatim yang diekstrak dari indeks Anda, bukan respons yang dibentuk oleh model penyelesaian obrolan.
Kueri dan konten terindeks harus diratakan erat agar jawaban dikembalikan. Jika tidak ada kandidat yang memenuhi ambang keyakinan, respons tidak menyertakan jawaban. Contoh ini menggunakan pertanyaan yang diketahui menghasilkan hasil sehingga Anda dapat melihat sintaksnya. Jika jawaban tidak berguna untuk skenario Anda, hilangkan setQueryAnswer dari kode Anda. Untuk jawaban yang terstruktur, pertimbangkan pola RAG atau pengambilan informasi secara agenik.
import com.azure.search.documents.models
.QueryAnswer;
import com.azure.search.documents.models
.QueryAnswerResult;
import com.azure.search.documents.models
.QueryAnswerType;
var searchOptions = new SearchOptions()
.setQueryType(QueryType.SEMANTIC)
.setSemanticSearchOptions(
new SemanticSearchOptions()
.setSemanticConfigurationName(
SearchConfig.SEMANTIC_CONFIG_NAME)
.setQueryCaption(
new QueryCaption(
QueryCaptionType.EXTRACTIVE))
.setQueryAnswer(
new QueryAnswer(
QueryAnswerType.EXTRACTIVE)))
.setSelect(
"HotelName", "Description", "Category");
SearchPagedIterable results = searchClient.search(
"What's a good hotel for people who like to read",
searchOptions, null);
List<QueryAnswerResult> semanticAnswers =
results.getSemanticResults().getQueryAnswers();
for (QueryAnswerResult answer :
semanticAnswers != null ? semanticAnswers
: List.<QueryAnswerResult>of()) {
if (answer.getHighlights() != null) {
System.out.printf(
"Semantic Answer: %s%n",
answer.getHighlights());
} else {
System.out.printf(
"Semantic Answer: %s%n",
answer.getText());
}
System.out.printf(
"Semantic Answer Score: %.2f%n",
answer.getScore());
}
Poin-poin penting:
-
QueryAnswer(QueryAnswerType.EXTRACTIVE)memungkinkan jawaban ekstraktif untuk kueri yang menyerupai pertanyaan. - Jawabannya adalah konten verbatim yang diekstrak dari indeks Anda, bukan teks yang dihasilkan.
-
results.getSemanticResults().getQueryAnswers()mengambil objek jawaban secara terpisah dari hasil pencarian.
Dalam panduan memulai cepat ini, Anda menggunakan pustaka klien Pencarian Azure AI untuk JavaScript untuk menambahkan peringkat semantik ke indeks pencarian yang ada dan melakukan kueri pada indeks tersebut.
Peringkat semantik adalah fungsionalitas sisi kueri yang menggunakan pemahaman pembacaan mesin untuk mengodekan ulang hasil pencarian, mempromosikan kecocokan yang paling relevan secara semantik ke bagian atas daftar. Anda dapat menambahkan konfigurasi semantik ke indeks yang ada tanpa persyaratan pembangunan ulang. Peringkat semantik paling efektif untuk teks informasi atau deskriptif.
Tips
Ingin segera memulai? Unduh kode source di GitHub.
Prasyarat
Akun Azure dengan langganan aktif. Buat akun secara gratis.
Layanan Pencarian Azure AI.
Indeks dengan bidang teks deskriptif yang dikaitkan sebagai
searchabledanretrievable. Mulai cepat ini mengasumsikan indeks sampel hotel.Node.js 20 LTS atau yang lebih baru.
Git untuk mengkloning repositori sampel.
Azure CLI untuk autentikasi tanpa kunci dengan Microsoft Entra ID.
Mengonfigurasi akses
Sebelum memulai, pastikan Anda memiliki izin untuk mengakses konten dan operasi di Pencarian Azure AI. Mulai cepat ini menggunakan Microsoft Entra ID untuk autentikasi dan akses berbasis peran untuk otorisasi. Anda harus menjadi Pemilik atau Administrator Akses Pengguna untuk menetapkan peran. Jika peran tidak dapat dilakukan, gunakan autentikasi berbasis kunci sebagai gantinya.
Untuk mengonfigurasi akses berbasis peran yang direkomendasikan:
Aktifkan akses berbasis peran untuk layanan pencarian Anda.
Tetapkan peran berikut ke akun pengguna Anda.
Kontributor Layanan Pencarian
Pembaca Indeks Data Pencarian
Catatan
Tidak seperti panduan cepat lain yang membuat dan memuat indeks, panduan cepat ini menggunakan indeks yang sudah ada dan sudah berisi data, sehingga Anda tidak memerlukan peran Kontributor Data Indeks Pencarian.
Dapatkan titik akhir
Setiap layanan Pencarian Azure AI memiliki endpoint, yang merupakan URL unik yang mengidentifikasi dan menyediakan akses jaringan ke layanan. Di bagian selanjutnya, Anda menentukan titik akhir ini untuk menyambungkan ke layanan pencarian Anda secara terprogram.
Untuk mendapatkan titik akhir:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilih Gambaran Umum.
Catat titik akhir, yang akan terlihat seperti
https://my-service.search.windows.net.
Mulai dengan indeks
Langkah cepat ini memodifikasi indeks yang ada untuk menyertakan konfigurasi semantik. Kami merekomendasikan indeks contoh hotel, yang dapat Anda buat dalam hitungan menit menggunakan wizard di portal Azure.
Untuk menggunakan indeks yang berbeda, ganti nama indeks, nama bidang dalam konfigurasi semantik, dan nama bidang dalam pernyataan kueri select di seluruh kode sampel. Indeks Anda harus berisi bidang teks deskriptif yang dikaitkan sebagai searchable dan retrievable.
Untuk meninjau dan menjalankan kueri pada indeks sampel hotel sebelum pengurutan semantik:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilihIndeks> pencarian.
Pilih hotel-sampel.
Pilih Konfigurasi semantik untuk melihat konfigurasi yang ada. Jika Anda mengaktifkan peringkat semantik selama alur pembuatan wizard, harus ada konfigurasi default.
Pilih Penjelajah pencarian, lalu pilih Tampilkan>tampilan JSON.
Tempelkan JSON berikut ke editor kueri.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Pilih Cari untuk menjalankan kueri.
Responsnya harus mirip dengan contoh berikut. Ini adalah kueri teks lengkap yang diberi peringkat oleh BM25, sehingga hasilnya cocok pada istilah kueri individual dan varian linguistik daripada arti keseluruhan kueri. Misalnya,
walkingmencocokkanwalk, danlivemencocokkanmusicsecara independen daripada sebagai frasa."@odata.count": 30, "value": [ { "@search.score": 5.004435, "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tips
Kueri ini memperlihatkan tampilan respons sebelum peringkat semantik diterapkan. Setelah Anda mengonfigurasi konfigurasi semantik, tambahkan
"queryType": "semantic"dan"semanticConfiguration": "semantic-config"untuk melihat bagaimana kueri yang sama diberi peringkat berbeda dengan peringkat semantik.
Siapkan lingkungan
Gunakan Git untuk mengkloning repositori sampel.
git clone https://github.com/Azure-Samples/azure-search-javascript-samplesMasuk ke folder panduan mulai cepat.
cd azure-search-javascript-samples/quickstart-semantic-ranking-jsDi
sample.env, ganti nilai tempat penampung untukAZURE_SEARCH_ENDPOINTdengan URL yang Anda peroleh di Dapatkan titik akhir.Ganti nama
sample.envmenjadi.env.mv sample.env .envPasang dependensi.
npm installKetika penginstalan selesai, Anda akan melihat
node_modulesfolder di direktori proyek.Untuk autentikasi tanpa kunci dengan Microsoft Entra ID, masuk ke akun Azure Anda. Jika Anda memiliki beberapa langganan, pilih langganan yang berisi layanan Pencarian Azure AI Anda.
az login
Jalankan kode
Dapatkan pengaturan indeks yang ada.
node -r dotenv/config src/getIndexSettings.jsPerbarui indeks dengan konfigurasi semantik.
node -r dotenv/config src/updateIndexSettings.jsJalankan kueri semantik.
node -r dotenv/config src/semanticQuery.jsJalankan kueri semantik dengan keterangan.
node -r dotenv/config src/semanticQueryReturnCaptions.jsJalankan kueri semantik dengan jawaban.
node -r dotenv/config src/semanticAnswer.js
Keluaran
getIndexSettings.js Skrip mengembalikan nama indeks, bidangnya, dan konfigurasi semantik yang ada.
Getting semantic ranking index settings...
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: true
Field: HotelName, Type: Edm.String, Searchable: true
Field: Description, Type: Edm.String, Searchable: true
Field: Description_fr, Type: Edm.String, Searchable: true
Field: Category, Type: Edm.String, Searchable: true
Field: Tags, Type: Collection(Edm.String), Searchable: true
// Trimmed for brevity
Semantic ranking configurations: 1
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
updateIndexSettings.js Skrip mengembalikan semua konfigurasi semantik pada indeks, termasuk yang ditambahkan kode, diikuti dengan pesan sukses.
Semantic configurations:
----------------------------------------
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
Keywords fields:
Content fields: AzureSearch_DocumentKey
----------------------------------------
Configuration name: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
----------------------------------------
Semantic configuration updated successfully.
semanticQuery.js Skrip mengembalikan semua dokumen cocok yang diurutkan berdasarkan skor peringkat ulang peringkat semantik.
Search result #1:
Re-ranker Score: 2.613231658935547
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
Search result #2:
Re-ranker Score: 2.271434783935547
HotelId: 2
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
Search result #3:
Re-ranker Score: 1.9861756563186646
HotelId: 4
HotelName: Sublime Palace Hotel
Description: Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience.
// Trimmed for brevity
semanticQueryReturnCaptions.js Skrip mengembalikan elemen keterangan dengan penyorotan temuan bersama bidang pencarian. Keterangan adalah bagian yang paling relevan dalam hasilnya. Jika indeks Anda menyertakan teks yang lebih besar, keterangan membantu mengekstrak kalimat yang paling menarik.
Search result #1:
Re-ranker Score: 2.613231658935547
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
Caption with highlights: Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and then head over to<em> Benaroya Hall </em>to catch the evening's concert performance.
------------------------------------------------------------
Search result #2:
Re-ranker Score: 2.271434783935547
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
Caption text: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live.
------------------------------------------------------------
// Trimmed for brevity
semanticAnswer.js Skrip mengembalikan jawaban semantik yang ditarik dari salah satu hasil yang paling cocok dengan pertanyaan, diikuti dengan hasil pencarian dengan keterangan.
Answers:
Semantic answer result #1:
Semantic Answer: Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
Semantic Answer Score: 0.9829999804496765
Search Results:
Search result #1:
2.124817371368408
Stay-Kay City Hotel
This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
Caption: This classic hotel is<em> fully-refurbished </em>and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
// Trimmed for brevity
Memahami kode
Catatan
Cuplikan kode di bagian ini mungkin telah dimodifikasi untuk keterbacaan. Untuk contoh kerja lengkap, lihat kode sumber.
Sekarang setelah Anda menjalankan kode, mari kita uraikan langkah-langkah kunci:
- Konfigurasi dan autentikasi
- Memperbarui indeks dengan konfigurasi semantik
- Menjalankan kueri pada indeks
Konfigurasi dan autentikasi
File config.js memuat variabel lingkungan dan membuat DefaultAzureCredential untuk autentikasi.
import { DefaultAzureCredential }
from "@azure/identity";
export const searchEndpoint =
process.env.AZURE_SEARCH_ENDPOINT
|| "PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE";
export const indexName =
process.env.AZURE_SEARCH_INDEX_NAME
|| "hotels-sample";
export const semanticConfigurationName =
process.env.SEMANTIC_CONFIGURATION_NAME
|| "semantic-config";
export const credential = new DefaultAzureCredential();
Poin-poin penting:
-
DefaultAzureCredentialmenyediakan autentikasi tanpa kunci menggunakan Microsoft Entra ID. Ini menautkan beberapa jenis kredensial, termasuk kredensial Azure CLI dariaz login. - Variabel lingkungan dimuat dari
.envfile menggunakandotenv.
Memperbarui indeks dengan konfigurasi semantik
File updateIndexSettings.js menambahkan konfigurasi semantik ke indeks hotels-sample yang sudah ada. Operasi ini tidak menghapus dokumen pencarian apa pun, dan indeks Anda tetap beroperasi setelah konfigurasi ditambahkan.
import { SearchIndexClient }
from "@azure/search-documents";
import {
searchEndpoint, indexName,
credential, semanticConfigurationName
} from "./config.js";
const indexClient = new SearchIndexClient(
searchEndpoint, credential
);
const existingIndex =
await indexClient.getIndex(indexName);
const fields = {
titleField: { name: "HotelName" },
keywordsFields: [{ name: "Tags" }],
contentFields: [{ name: "Description" }]
};
const newSemanticConfiguration = {
name: semanticConfigurationName,
prioritizedFields: fields
};
if (existingIndex.semanticSearch
&& existingIndex.semanticSearch.configurations) {
existingIndex.semanticSearch.configurations
.push(newSemanticConfiguration);
} else {
existingIndex.semanticSearch = {
configurations: [newSemanticConfiguration]
};
}
await indexClient.createOrUpdateIndex(existingIndex);
Poin-poin penting:
- Konfigurasi semantik menentukan bidang yang digunakan untuk peringkat semantik.
titleFieldmenentukan judul dokumen,contentFieldsmenentukan konten utama, dankeywordsFieldsmenentukan kata kunci atau bidang tag. - Anda membuat objek konfigurasi dan mendorongnya ke array indeks
semanticSearch.configurationsyang ada. -
createOrUpdateIndexmendorong skema yang diperbarui ke layanan pencarian tanpa membangun kembali indeks atau menghapus dokumen.
Melakukan kueri pada indeks
Skrip kueri menjalankan tiga kueri secara berurutan, berkembang dari pencarian semantik dasar ke peringkat semantik dengan keterangan dan jawaban.
Kueri semantik (tanpa keterangan, tidak ada jawaban)
Kode berikut menunjukkan persyaratan minimum untuk memanggil peringkat semantik.
import { SearchClient }
from "@azure/search-documents";
import {
credential, searchEndpoint,
indexName, semanticConfigurationName
} from "./config.js";
const searchClient = new SearchClient(
searchEndpoint, indexName, credential
);
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
Poin-poin penting:
-
queryType: "semantic"mengaktifkan peringkat semantik pada kueri. -
semanticSearchOptions.configurationNamemenentukan konfigurasi semantik mana yang akan digunakan. - Hasil
rerankerScoremenunjukkan relevansi semantik (semakin tinggi semakin baik).
Kueri semantik dengan keterangan
Kode berikut menambahkan keterangan teks untuk menyoroti bagian yang paling relevan dari setiap hasil, dengan penyorotan istilah dan frasa penting.
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive",
highlight: true
}
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
for await (const result of results.results) {
const captions = result.captions;
if (captions && captions.length > 0) {
const caption = captions[0];
if (caption.highlights) {
console.log(
`Caption: ${caption.highlights}`
);
}
}
}
Poin-poin penting:
-
captions.captionType: "extractive"mengaktifkan keterangan ekstraktif dari bidang konten. - Keterangan menampilkan bagian yang paling relevan dan menambahkan
<em>tag di sekitar istilah penting.
Kueri semantik dengan jawaban
Kueri akhir menambahkan jawaban semantik. Kueri ini menggunakan pertanyaan sebagai teks pencarian karena jawaban semantik berfungsi paling baik saat kueri diungkapkan sebagai pertanyaan. Jawabannya adalah kutipan verbatim yang diekstrak dari indeks Anda, bukan respons yang dibentuk oleh model penyelesaian obrolan.
Kueri dan konten terindeks harus diratakan erat agar jawaban dikembalikan. Jika tidak ada kandidat yang memenuhi ambang keyakinan, respons tidak menyertakan jawaban. Contoh ini menggunakan pertanyaan yang diketahui menghasilkan hasil sehingga Anda dapat melihat sintaksnya. Jika jawaban tidak berguna untuk skenario Anda, hilangkan answers dari kode Anda. Untuk jawaban yang terstruktur, pertimbangkan pola RAG atau pengambilan informasi secara agenik.
const results = await searchClient.search(
"What's a good hotel for people who "
+ "like to read",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive"
},
answers: {
answerType: "extractive"
}
},
select: [
"HotelName", "Description", "Category"
]
}
);
const semanticAnswers = results.answers;
for (const answer of semanticAnswers || []) {
if (answer.highlights) {
console.log(
`Semantic Answer: ${answer.highlights}`
);
} else {
console.log(
`Semantic Answer: ${answer.text}`
);
}
console.log(
`Semantic Answer Score: ${answer.score}`
);
}
Poin-poin penting:
-
answers.answerType: "extractive"memungkinkan jawaban ekstraktif untuk kueri yang menyerupai pertanyaan. - Jawabannya adalah konten verbatim yang diekstrak dari indeks Anda, bukan teks yang dihasilkan.
-
results.answersmengambil objek jawaban secara terpisah dari hasil pencarian.
Dalam panduan memulai cepat ini, Anda menggunakan pustaka klien Pencarian Azure AI untuk Python untuk menambahkan peringkat semantik ke indeks pencarian yang ada dan melakukan kueri pada indeks.
Peringkat semantik adalah fungsionalitas sisi kueri yang menggunakan pemahaman pembacaan mesin untuk mengodekan ulang hasil pencarian, mempromosikan kecocokan yang paling relevan secara semantik ke bagian atas daftar. Anda dapat menambahkan konfigurasi semantik ke indeks yang ada tanpa persyaratan pembangunan ulang. Peringkat semantik paling efektif untuk teks informasi atau deskriptif.
Tips
Ingin segera memulai? Unduh kode source di GitHub.
Prasyarat
Akun Azure dengan langganan aktif. Buat akun secara gratis.
Layanan Pencarian Azure AI.
Indeks dengan bidang teks deskriptif yang dikaitkan sebagai
searchabledanretrievable. Mulai cepat ini mengasumsikan indeks sampel hotel.Python 3.10 atau yang lebih baru.
Visual Studio Code dengan ekstensi Python.
Git untuk mengkloning repositori sampel.
Azure CLI untuk autentikasi tanpa kunci dengan Microsoft Entra ID.
Mengonfigurasi akses
Sebelum memulai, pastikan Anda memiliki izin untuk mengakses konten dan operasi di Pencarian Azure AI. Mulai cepat ini menggunakan Microsoft Entra ID untuk autentikasi dan akses berbasis peran untuk otorisasi. Anda harus menjadi Pemilik atau Administrator Akses Pengguna untuk menetapkan peran. Jika peran tidak dapat dilakukan, gunakan autentikasi berbasis kunci sebagai gantinya.
Untuk mengonfigurasi akses berbasis peran yang direkomendasikan:
Aktifkan akses berbasis peran untuk layanan pencarian Anda.
Tetapkan peran berikut ke akun pengguna Anda.
Kontributor Layanan Pencarian
Pembaca Indeks Data Pencarian
Catatan
Tidak seperti panduan cepat lain yang membuat dan memuat indeks, panduan cepat ini menggunakan indeks yang sudah ada dan sudah berisi data, sehingga Anda tidak memerlukan peran Kontributor Data Indeks Pencarian.
Dapatkan titik akhir
Setiap layanan Pencarian Azure AI memiliki endpoint, yang merupakan URL unik yang mengidentifikasi dan menyediakan akses jaringan ke layanan. Di bagian selanjutnya, Anda menentukan titik akhir ini untuk menyambungkan ke layanan pencarian Anda secara terprogram.
Untuk mendapatkan titik akhir:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilih Gambaran Umum.
Catat titik akhir, yang akan terlihat seperti
https://my-service.search.windows.net.
Mulai dengan indeks
Langkah cepat ini memodifikasi indeks yang ada untuk menyertakan konfigurasi semantik. Kami merekomendasikan indeks contoh hotel, yang dapat Anda buat dalam hitungan menit menggunakan wizard di portal Azure.
Untuk menggunakan indeks yang berbeda, ganti nama indeks, nama bidang dalam konfigurasi semantik, dan nama bidang dalam pernyataan kueri select di seluruh kode sampel. Indeks Anda harus berisi bidang teks deskriptif yang dikaitkan sebagai searchable dan retrievable.
Untuk meninjau dan menjalankan kueri pada indeks sampel hotel sebelum pengurutan semantik:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilihIndeks> pencarian.
Pilih hotel-sampel.
Pilih Konfigurasi semantik untuk melihat konfigurasi yang ada. Jika Anda mengaktifkan peringkat semantik selama alur pembuatan wizard, harus ada konfigurasi default.
Pilih Penjelajah pencarian, lalu pilih Tampilkan>tampilan JSON.
Tempelkan JSON berikut ke editor kueri.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Pilih Cari untuk menjalankan kueri.
Responsnya harus mirip dengan contoh berikut. Ini adalah kueri teks lengkap yang diberi peringkat oleh BM25, sehingga hasilnya cocok pada istilah kueri individual dan varian linguistik daripada arti keseluruhan kueri. Misalnya,
walkingmencocokkanwalk, danlivemencocokkanmusicsecara independen daripada sebagai frasa."@odata.count": 30, "value": [ { "@search.score": 5.004435, "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tips
Kueri ini memperlihatkan tampilan respons sebelum peringkat semantik diterapkan. Setelah Anda mengonfigurasi konfigurasi semantik, tambahkan
"queryType": "semantic"dan"semanticConfiguration": "semantic-config"untuk melihat bagaimana kueri yang sama diberi peringkat berbeda dengan peringkat semantik.
Siapkan lingkungan
Gunakan Git untuk mengkloning repositori sampel.
git clone https://github.com/Azure-Samples/azure-search-python-samplesArahkan ke folder quickstart dan buka di Visual Studio Code.
cd azure-search-python-samples/Quickstart-Semantic-Ranking code .Di
sample.env, ganti nilai tempat penampung untukAZURE_SEARCH_ENDPOINTdengan URL yang Anda peroleh di Dapatkan titik akhir.Ganti nama
sample.envmenjadi.env.mv sample.env .envBuka
semantic-ranking-quickstart.ipynb.Tekan Ctrl+Shift+P, pilih Notebook: Pilih Notebook Kernel, dan ikuti perintah untuk membuat lingkungan virtual. Pilih requirements.txt untuk dependensi.
Setelah selesai, Anda akan melihat
.venvfolder di direktori proyek.Untuk autentikasi tanpa kunci dengan Microsoft Entra ID, masuk ke akun Azure Anda. Jika Anda memiliki beberapa langganan, pilih langganan yang berisi layanan Pencarian Azure AI Anda.
az login
Jalankan kode
Jalankan
Install packages and set variablessel untuk menginstal paket yang diperlukan dan memuat variabel lingkungan.Jalankan sel yang tersisa secara berurutan untuk menambahkan konfigurasi semantik dan mengkueri indeks.
Keluaran
Output dari sel Get the index definition adalah nama indeks, bidang-bidangnya, dan konfigurasi semantik yang mungkin ada.
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: True
Field: HotelName, Type: Edm.String, Searchable: True
Field: Description, Type: Edm.String, Searchable: True
Field: Description_fr, Type: Edm.String, Searchable: True
Field: Category, Type: Edm.String, Searchable: True
Field: Tags, Type: Collection(Edm.String), Searchable: True
// Trimmed for brevity
Semantic config: hotels-sample-semantic-configuration
Title field: HotelName
Output dari sel Add a semantic configuration to the index mencantumkan semua konfigurasi semantik pada indeks, termasuk yang ditambahkan oleh kode, diikuti dengan pesan keberhasilan.
Semantic configurations:
----------------------------------------
Configuration: hotels-sample-semantic-configuration
Title field: HotelName
Keywords fields: Category
Content fields: Description
Configuration: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
✅ Semantic configuration successfully added!
Output dari sel Run a term query mengembalikan semua dokumen yang cocok yang diurutkan berdasarkan skor BM25. Kueri garis besar ini tidak menggunakan peringkat semantik.
5.360838
4
Sublime Palace Hotel
Description: Sublime Cliff Hotel is located in the heart of the
historic center of Sublime in an extremely vibrant and lively area
within short walking distance to the sites and landmarks of the city
and is surrounded by the extraordinary beauty of churches, buildings,
shops and monuments. Sublime Cliff is part of a lovingly restored
19th century resort, updated for every modern convenience.
4.691083
2
Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza,
which has been expanded and renovated to the highest architectural
standards to create a modern, functional and first-class hotel in
which art and unique historical elements coexist with the most
modern comforts. The hotel also regularly hosts events like wine
tastings, beer dinners, and live music.
// Trimmed for brevity
Output dari sel Run a semantic query menghasilkan semua dokumen yang cocok yang diurutkan berdasarkan skor pengurut ulang semantik.
2.613231658935547
24
Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown,
within walking distance to theaters, art galleries, restaurants and
shops. Visit Seattle Art Museum by day, and then head over to
Benaroya Hall to catch the evening's concert performance.
2.271434783935547
2
Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza,
which has been expanded and renovated to the highest architectural
standards to create a modern, functional and first-class hotel in
which art and unique historical elements coexist with the most
modern comforts. The hotel also regularly hosts events like wine
tastings, beer dinners, and live music.
// Trimmed for brevity
Output dari sel Return captions menambahkan elemen keterangan dengan penyorotan kata kunci bersama bidang pencarian. Keterangan adalah bagian yang paling relevan dalam hasilnya. Jika indeks Anda menyertakan teks yang lebih besar, keterangan membantu mengekstrak kalimat yang paling menarik.
2.613231658935547
24
Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown,
within walking distance to theaters, art galleries, restaurants and
shops. Visit Seattle Art Museum by day, and then head over to
Benaroya Hall to catch the evening's concert performance.
Caption: Chic hotel near the city. High-rise hotel in downtown,
within walking distance to<em> theaters, </em>art galleries,
restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and
then head over to<em> Benaroya Hall </em>to catch the evening's
concert performance.
// Trimmed for brevity
Output Return semantic answers sel menyertakan jawaban semantik yang ditarik dari salah satu hasil yang paling cocok dengan pertanyaan, diikuti dengan hasil pencarian dengan keterangan.
Semantic Answer: Nature is Home on the beach. Explore the shore by
day, and then come home to our shared living space to relax around a
stone fireplace, sip something warm, and explore the<em> library
</em>by night. Save up to 30 percent. Valid Now through the end of
the year. Restrictions and blackouts may apply.
Semantic Answer Score: 0.9829999804496765
Memahami kode
Catatan
Cuplikan kode di bagian ini mungkin telah dimodifikasi untuk keterbacaan. Untuk contoh kerja lengkap, lihat kode sumber.
Sekarang setelah Anda menjalankan kode, mari kita uraikan langkah-langkah kunci:
- Konfigurasi dan autentikasi
- Memperbarui indeks dengan konfigurasi semantik
- Menjalankan kueri pada indeks
Konfigurasi dan autentikasi
Sel Install packages and set variables memuat variabel lingkungan dan membuat DefaultAzureCredential untuk autentikasi.
from dotenv import load_dotenv
from azure.identity import DefaultAzureCredential
from azure.identity import get_bearer_token_provider
import os
load_dotenv(override=True)
search_endpoint = os.environ["AZURE_SEARCH_ENDPOINT"]
credential = DefaultAzureCredential()
index_name = os.getenv(
"AZURE_SEARCH_INDEX", "hotels-sample"
)
Poin-poin penting:
-
DefaultAzureCredentialmenyediakan autentikasi tanpa kunci menggunakan Microsoft Entra ID. Ini menautkan beberapa jenis kredensial, termasuk kredensial Azure CLI dariaz login. - Variabel lingkungan dimuat dari
.envfile menggunakanpython-dotenv.
Memperbarui indeks dengan konfigurasi semantik
Sel Add a semantic configuration to the index menambahkan konfigurasi semantik pada indeks hotels-sample yang sudah ada. Operasi ini tidak menghapus dokumen pencarian apa pun, dan indeks Anda tetap beroperasi setelah konfigurasi ditambahkan.
from azure.search.documents.indexes.models import (
SemanticConfiguration,
SemanticField,
SemanticPrioritizedFields,
SemanticSearch
)
new_semantic_config = SemanticConfiguration(
name="semantic-config",
prioritized_fields=SemanticPrioritizedFields(
title_field=SemanticField(field_name="HotelName"),
keywords_fields=[
SemanticField(field_name="Tags")
],
content_fields=[
SemanticField(field_name="Description")
]
)
)
if existing_index.semantic_search is None:
existing_index.semantic_search = SemanticSearch(
configurations=[new_semantic_config]
)
else:
existing_index.semantic_search.configurations.append(
new_semantic_config
)
result = index_client.create_or_update_index(existing_index)
Poin-poin penting:
- Konfigurasi semantik menentukan bidang yang digunakan untuk peringkat semantik.
title_fieldmengatur judul dokumen,content_fieldsmengatur konten utama, dankeywords_fieldsmengatur kata kunci atau bidang tag. - Anda membuat konfigurasi dengan
SemanticConfigurationdan model terkaitSemanticPrioritizedFields, lalu menambahkannya ke indeks yang ada. -
create_or_update_indexmendorong skema yang diperbarui ke layanan pencarian tanpa membangun kembali indeks atau menghapus dokumen.
Melakukan kueri pada indeks
Sel kueri menjalankan empat kueri secara berurutan: pencarian kata kunci garis besar diikuti oleh tiga variasi peringkat semantik dengan fungsionalitas yang meningkat.
Kueri istilah (dasar acuan)
Sel Run a term query menjalankan pencarian kata kunci menggunakan penilaian BM25. Kueri garis besar ini tidak menggunakan peringkat semantik dan berfungsi sebagai titik perbandingan.
from azure.search.documents import SearchClient
search_client = SearchClient(
endpoint=search_endpoint,
index_name=index_name,
credential=credential
)
results = search_client.search(
query_type='simple',
search_text="walking distance to live music",
select='HotelId,HotelName,Description',
include_total_count=True
)
Poin-poin penting:
-
query_type='simple'menentukan pencarian kata kunci menggunakan penilaian BM25. -
@search.scoredalam hasil menunjukkan skor relevansi BM25.
Kueri semantik (tanpa keterangan, tidak ada jawaban)
Sel Run a semantic query menunjukkan persyaratan minimum untuk memanggil peringkat semantik.
from azure.search.documents import SearchClient
search_client = SearchClient(
endpoint=search_endpoint,
index_name=index_name,
credential=credential
)
results = search_client.search(
query_type='semantic',
semantic_configuration_name='semantic-config',
search_text="walking distance to live music",
select='HotelId,HotelName,Description',
query_caption='extractive'
)
Poin-poin penting:
-
query_type='semantic'mengaktifkan peringkat semantik pada kueri. -
semantic_configuration_namemenentukan konfigurasi semantik mana yang akan digunakan. - Hasil
@search.reranker_scoremenunjukkan relevansi semantik (semakin tinggi semakin baik).
Kueri semantik dengan keterangan
Sel Return captions menambahkan keterangan untuk mengekstrak bagian yang paling relevan dari setiap hasil, dengan penyorotan temuan diterapkan ke istilah dan frasa penting.
results = search_client.search(
query_type='semantic',
semantic_configuration_name='semantic-config',
search_text="walking distance to live music",
select='HotelName,HotelId,Description',
query_caption='extractive'
)
for result in results:
captions = result["@search.captions"]
if captions:
caption = captions[0]
if caption.highlights:
print(f"Caption: {caption.highlights}\n")
Poin-poin penting:
-
query_caption='extractive'mengaktifkan keterangan ekstraktif dari bidang konten. - Keterangan menampilkan bagian yang paling relevan dan menambahkan
<em>tag di sekitar istilah penting.
Kueri semantik dengan jawaban
Sel Return semantic answers menambahkan jawaban semantik. Kueri ini menggunakan pertanyaan sebagai teks pencarian karena jawaban semantik berfungsi paling baik saat kueri diungkapkan sebagai pertanyaan. Jawabannya adalah kutipan verbatim yang diekstrak dari indeks Anda, bukan respons yang dibentuk oleh model penyelesaian obrolan.
Kueri dan konten terindeks harus diratakan erat agar jawaban dikembalikan. Jika tidak ada kandidat yang memenuhi ambang keyakinan, respons tidak menyertakan jawaban. Contoh ini menggunakan pertanyaan yang diketahui menghasilkan hasil sehingga Anda dapat melihat sintaksnya. Jika jawaban tidak berguna untuk skenario Anda, hilangkan query_answer dari kode Anda. Untuk jawaban yang terstruktur, pertimbangkan pola RAG atau pengambilan informasi secara agenik.
results = search_client.search(
query_type='semantic',
semantic_configuration_name='semantic-config',
search_text="what's a good hotel for people who "
"like to read",
select='HotelName,Description,Category',
query_caption='extractive',
query_answer="extractive",
)
semantic_answers = results.get_answers()
for answer in semantic_answers:
if answer.highlights:
print(f"Semantic Answer: {answer.highlights}")
else:
print(f"Semantic Answer: {answer.text}")
print(f"Semantic Answer Score: {answer.score}\n")
Poin-poin penting:
-
query_answer="extractive"memungkinkan jawaban ekstraktif untuk kueri yang menyerupai pertanyaan. - Jawabannya adalah konten verbatim yang diekstrak dari indeks Anda, bukan teks yang dihasilkan.
-
results.get_answers()mengambil objek jawaban secara terpisah dari hasil pencarian.
Dalam memulai cepat ini, Anda menggunakan library klien Pencarian Azure AI untuk JavaScript (kompatibel dengan TypeScript) untuk menambahkan peringkat semantik ke indeks pencarian yang ada dan melakukan kueri terhadap indeks.
Peringkat semantik adalah fungsionalitas sisi kueri yang menggunakan pemahaman pembacaan mesin untuk mengodekan ulang hasil pencarian, mempromosikan kecocokan yang paling relevan secara semantik ke bagian atas daftar. Anda dapat menambahkan konfigurasi semantik ke indeks yang ada tanpa persyaratan pembangunan ulang. Peringkat semantik paling efektif untuk teks informasi atau deskriptif.
Tips
Ingin segera memulai? Unduh kode source di GitHub.
Prasyarat
Akun Azure dengan langganan aktif. Buat akun secara gratis.
Layanan Pencarian Azure AI.
Indeks dengan bidang teks deskriptif yang dikaitkan sebagai
searchabledanretrievable. Mulai cepat ini mengasumsikan indeks sampel hotel.Node.js 20 LTS atau yang lebih baru untuk menjalankan kode yang dikompilasi.
TypeScript untuk mengkompilasi TypeScript ke JavaScript.
Git untuk mengkloning repositori sampel.
Azure CLI untuk autentikasi tanpa kunci dengan Microsoft Entra ID.
Mengonfigurasi akses
Sebelum memulai, pastikan Anda memiliki izin untuk mengakses konten dan operasi di Pencarian Azure AI. Mulai cepat ini menggunakan Microsoft Entra ID untuk autentikasi dan akses berbasis peran untuk otorisasi. Anda harus menjadi Pemilik atau Administrator Akses Pengguna untuk menetapkan peran. Jika peran tidak dapat dilakukan, gunakan autentikasi berbasis kunci sebagai gantinya.
Untuk mengonfigurasi akses berbasis peran yang direkomendasikan:
Aktifkan akses berbasis peran untuk layanan pencarian Anda.
Tetapkan peran berikut ke akun pengguna Anda.
Kontributor Layanan Pencarian
Pembaca Indeks Data Pencarian
Catatan
Tidak seperti panduan cepat lain yang membuat dan memuat indeks, panduan cepat ini menggunakan indeks yang sudah ada dan sudah berisi data, sehingga Anda tidak memerlukan peran Kontributor Data Indeks Pencarian.
Dapatkan titik akhir
Setiap layanan Pencarian Azure AI memiliki endpoint, yang merupakan URL unik yang mengidentifikasi dan menyediakan akses jaringan ke layanan. Di bagian selanjutnya, Anda menentukan titik akhir ini untuk menyambungkan ke layanan pencarian Anda secara terprogram.
Untuk mendapatkan titik akhir:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilih Gambaran Umum.
Catat titik akhir, yang akan terlihat seperti
https://my-service.search.windows.net.
Mulai dengan indeks
Langkah cepat ini memodifikasi indeks yang ada untuk menyertakan konfigurasi semantik. Kami merekomendasikan indeks contoh hotel, yang dapat Anda buat dalam hitungan menit menggunakan wizard di portal Azure.
Untuk menggunakan indeks yang berbeda, ganti nama indeks, nama bidang dalam konfigurasi semantik, dan nama bidang dalam pernyataan kueri select di seluruh kode sampel. Indeks Anda harus berisi bidang teks deskriptif yang dikaitkan sebagai searchable dan retrievable.
Untuk meninjau dan menjalankan kueri pada indeks sampel hotel sebelum pengurutan semantik:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilihIndeks> pencarian.
Pilih hotel-sampel.
Pilih Konfigurasi semantik untuk melihat konfigurasi yang ada. Jika Anda mengaktifkan peringkat semantik selama alur pembuatan wizard, harus ada konfigurasi default.
Pilih Penjelajah pencarian, lalu pilih Tampilkan>tampilan JSON.
Tempelkan JSON berikut ke editor kueri.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Pilih Cari untuk menjalankan kueri.
Responsnya harus mirip dengan contoh berikut. Ini adalah kueri teks lengkap yang diberi peringkat oleh BM25, sehingga hasilnya cocok pada istilah kueri individual dan varian linguistik daripada arti keseluruhan kueri. Misalnya,
walkingmencocokkanwalk, danlivemencocokkanmusicsecara independen daripada sebagai frasa."@odata.count": 30, "value": [ { "@search.score": 5.004435, "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tips
Kueri ini memperlihatkan tampilan respons sebelum peringkat semantik diterapkan. Setelah Anda mengonfigurasi konfigurasi semantik, tambahkan
"queryType": "semantic"dan"semanticConfiguration": "semantic-config"untuk melihat bagaimana kueri yang sama diberi peringkat berbeda dengan peringkat semantik.
Siapkan lingkungan
Gunakan Git untuk mengkloning repositori sampel.
git clone https://github.com/Azure-Samples/azure-search-javascript-samplesMasuk ke folder panduan mulai cepat.
cd azure-search-javascript-samples/quickstart-semantic-ranking-tsDi
sample.env, ganti nilai tempat penampung untukAZURE_SEARCH_ENDPOINTdengan URL yang Anda peroleh di Dapatkan titik akhir.Ganti nama
sample.envmenjadi.env.mv sample.env .envPasang dependensi.
npm installKetika penginstalan selesai, Anda akan melihat
node_modulesfolder di direktori proyek.Kompilasi file TypeScript ke JavaScript.
npm run buildUntuk autentikasi tanpa kunci dengan Microsoft Entra ID, masuk ke akun Azure Anda. Jika Anda memiliki beberapa langganan, pilih langganan yang berisi layanan Pencarian Azure AI Anda.
az login
Jalankan kode
Dapatkan pengaturan indeks yang ada.
node -r dotenv/config dist/getIndexSettings.jsPerbarui indeks dengan konfigurasi semantik.
node -r dotenv/config dist/updateIndexSettings.jsJalankan kueri semantik.
node -r dotenv/config dist/semanticQuery.jsJalankan kueri semantik dengan keterangan.
node -r dotenv/config dist/semanticQueryReturnCaptions.jsJalankan kueri semantik dengan jawaban.
node -r dotenv/config dist/semanticAnswer.jsCatatan
Perintah ini menjalankan file yang dikompilasi
.jsdaridistfolder. Kode TypeScript harus ditranspilasi ke JavaScript sebelum Node.js dapat menjalankannya, itulah sebabnya Anda sebelumnya menjalankannpm run build.
Keluaran
getIndexSettings.js Skrip mengembalikan nama indeks, jumlah bidang, detail bidang dengan jenis dan status yang dapat dicari, dan konfigurasi semantik yang ada.
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: true
Field: HotelName, Type: Edm.String, Searchable: true
Field: Description, Type: Edm.String, Searchable: true
// Trimmed for brevity
Semantic ranking configurations: 1
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
updateIndexSettings.js Skrip mengembalikan semua konfigurasi semantik, termasuk yang Anda tambahkan.
Semantic configurations:
----------------------------------------
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
Keywords fields:
Content fields: AzureSearch_DocumentKey
----------------------------------------
Configuration name: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
----------------------------------------
Semantic configuration updated successfully.
Skrip semanticQuery.js mengembalikan hasil yang diurutkan berdasarkan nilai reranker.
Search result #1:
Re-ranker Score: 2.613231658935547
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown,
within walking distance to theaters, art galleries, restaurants and
shops. Visit Seattle Art Museum by day, and then head over to
Benaroya Hall to catch the evening's concert performance.
Search result #2:
Re-ranker Score: 2.271434783935547
HotelId: 2
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza...
// Trimmed for brevity
semanticQueryReturnCaptions.js Skrip menghasilkan keterangan ekstraktif dengan sorotan hit penting. Keterangan adalah bagian yang paling relevan dalam hasilnya.
Search result #1:
Re-ranker Score: 2.613231658935547
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown,
within walking distance to theaters, art galleries, restaurants and
shops. Visit Seattle Art Museum by day, and then head over to
Benaroya Hall to catch the evening's concert performance.
Caption with highlights: Chic hotel near the city. High-rise hotel
in downtown, within walking distance to<em> theaters, </em>art
galleries, restaurants and shops. Visit<em> Seattle Art Museum
</em>by day, and then head over to<em> Benaroya Hall </em>to catch
the evening's concert performance.
------------------------------------------------------------
Search result #2:
Re-ranker Score: 2.271434783935547
HotelName: Old Century Hotel
// Trimmed for brevity
semanticAnswer.js Skrip mengembalikan jawaban semantik (konten verbatim) yang ditarik dari hasil yang paling cocok dengan pertanyaan.
Semantic answer result #1:
Semantic Answer: Nature is Home on the beach. Explore the shore by
day, and then come home to our shared living space to relax around
a stone fireplace, sip something warm, and explore the<em> library
</em>by night. Save up to 30 percent. Valid Now through the end of
the year. Restrictions and blackouts may apply.
Semantic Answer Score: 0.9829999804496765
Search Results:
Search result #1:
2.124817371368408
Stay-Kay City Hotel
This classic hotel is fully-refurbished and ideally located on the
main commercial artery of the city in the heart of New York...
Caption: This classic hotel is<em> fully-refurbished </em>and
ideally located on the main commercial artery of the city...
// Trimmed for brevity
Memahami kode
Catatan
Cuplikan kode di bagian ini mungkin telah dimodifikasi untuk keterbacaan. Untuk contoh kerja lengkap, lihat kode sumber.
Sekarang setelah Anda menjalankan kode, mari kita uraikan langkah-langkah kunci:
- Konfigurasi dan autentikasi
- Memperbarui indeks dengan konfigurasi semantik
- Menjalankan kueri pada indeks
Konfigurasi dan autentikasi
File config.ts memuat variabel lingkungan, membuat DefaultAzureCredential untuk autentikasi, dan menentukan antarmuka HotelDocument untuk keamanan tipe.
import { DefaultAzureCredential }
from "@azure/identity";
export const searchEndpoint =
process.env.AZURE_SEARCH_ENDPOINT
|| "PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE";
export const indexName =
process.env.AZURE_SEARCH_INDEX_NAME
|| "hotels-sample";
export const semanticConfigurationName =
process.env.SEMANTIC_CONFIGURATION_NAME
|| "semantic-config";
export const credential = new DefaultAzureCredential();
export interface HotelDocument {
HotelId: string;
HotelName: string;
Description: string;
Category: string;
Tags: string[];
}
Poin-poin penting:
-
DefaultAzureCredentialmenyediakan autentikasi tanpa kunci menggunakan Microsoft Entra ID. Ini menautkan beberapa jenis kredensial, termasuk kredensial Azure CLI dariaz login. - Antarmuka
HotelDocumentmenyediakan pemeriksaan tipe waktu kompilasi untuk hasil pencarian, memastikan akses tipe aman ke bidang dokumen. - Variabel lingkungan dimuat dari
.envfile menggunakandotenv.
Memperbarui indeks dengan konfigurasi semantik
File updateIndexSettings.ts menambahkan konfigurasi semantik ke indeks hotels-sample yang sudah ada. Operasi ini tidak menghapus dokumen pencarian apa pun, dan indeks Anda tetap beroperasi setelah konfigurasi ditambahkan. Anotasi jenis TypeScript memastikan konfigurasi cocok dengan skema yang diharapkan.
import {
SearchIndexClient,
SemanticConfiguration,
SemanticPrioritizedFields,
SemanticField
} from "@azure/search-documents";
import {
searchEndpoint, indexName,
credential, semanticConfigurationName
} from "./config.js";
const indexClient = new SearchIndexClient(
searchEndpoint, credential
);
const existingIndex =
await indexClient.getIndex(indexName);
const fields: SemanticPrioritizedFields = {
titleField: { name: "HotelName" },
keywordsFields: [
{ name: "Tags" }
] as SemanticField[],
contentFields: [
{ name: "Description" }
] as SemanticField[]
};
const newSemanticConfiguration:
SemanticConfiguration = {
name: semanticConfigurationName,
prioritizedFields: fields
};
if (existingIndex.semanticSearch
&& existingIndex.semanticSearch.configurations) {
existingIndex.semanticSearch.configurations
.push(newSemanticConfiguration);
} else {
existingIndex.semanticSearch = {
configurations: [newSemanticConfiguration]
};
}
await indexClient.createOrUpdateIndex(existingIndex);
Poin-poin penting:
- Jenis TypeScript seperti
SemanticPrioritizedFields,SemanticConfiguration, danSemanticFieldmenyediakan validasi waktu kompilasi untuk struktur konfigurasi. -
titleFieldmengatur judul dokumen,contentFieldsmengatur konten utama, dankeywordsFieldsmengatur kata kunci atau bidang tag. -
createOrUpdateIndexmendorong skema yang diperbarui ke layanan pencarian tanpa membangun kembali indeks atau menghapus dokumen.
Melakukan kueri pada indeks
Skrip kueri menjalankan tiga kueri secara berurutan, berkembang dari pencarian semantik dasar ke peringkat semantik dengan keterangan dan jawaban.
Kueri semantik (tanpa keterangan, tidak ada jawaban)
Skrip semanticQuery.ts menunjukkan persyaratan minimum untuk memanggil pemeringkatan semantik dengan hasil yang aman tipe.
import { SearchClient }
from "@azure/search-documents";
import {
HotelDocument, credential,
searchEndpoint, indexName,
semanticConfigurationName
} from "./config.js";
const searchClient =
new SearchClient<HotelDocument>(
searchEndpoint, indexName, credential
);
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
Poin-poin penting:
-
SearchClient<HotelDocument>menyediakan akses aman tipe ke bidang dokumen pada hasil, dengan pelengkapan otomatis untuk nama bidang diselectdanresult.document. -
queryType: "semantic"mengaktifkan peringkat semantik pada kueri. -
semanticSearchOptions.configurationNamemenentukan konfigurasi semantik mana yang akan digunakan.
Kueri semantik dengan keterangan
semanticQueryReturnCaptions.ts Skrip menambahkan teks pelengkap untuk mengekstrak bagian paling relevan dari setiap hasil, dengan penyorotan temuan hasil diterapkan pada istilah dan frasa penting.
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive",
highlight: true
}
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
for await (const result of results.results) {
const captions = result.captions;
if (captions && captions.length > 0) {
const caption = captions[0];
if (caption.highlights) {
console.log(
`Caption: ${caption.highlights}`
);
}
}
}
Poin-poin penting:
-
captions.captionType: "extractive"mengaktifkan keterangan ekstraktif dari bidang konten. - Keterangan menampilkan bagian yang paling relevan dan menambahkan
<em>tag di sekitar istilah penting.
Kueri semantik dengan jawaban
semanticAnswer.ts Skrip menambahkan jawaban semantik. Ini menggunakan pertanyaan sebagai teks pencarian karena jawaban semantik berfungsi paling baik ketika kueri diungkapkan sebagai pertanyaan. Jawabannya adalah kutipan verbatim yang diekstrak dari indeks Anda, bukan respons yang dibentuk oleh model penyelesaian obrolan.
Kueri dan konten terindeks harus diratakan erat agar jawaban dikembalikan. Jika tidak ada kandidat yang memenuhi ambang keyakinan, respons tidak menyertakan jawaban. Contoh ini menggunakan pertanyaan yang diketahui menghasilkan hasil sehingga Anda dapat melihat sintaksnya. Jika jawaban tidak berguna untuk skenario Anda, hilangkan answers dari kode Anda. Untuk jawaban yang terstruktur, pertimbangkan pola RAG atau pengambilan informasi secara agenik.
const results = await searchClient.search(
"What's a good hotel for people who "
+ "like to read",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive"
},
answers: {
answerType: "extractive"
}
},
select: [
"HotelName", "Description", "Category"
]
}
);
const semanticAnswers = results.answers;
for (const answer of semanticAnswers || []) {
if (answer.highlights) {
console.log(
`Semantic Answer: ${answer.highlights}`
);
} else {
console.log(
`Semantic Answer: ${answer.text}`
);
}
console.log(
`Semantic Answer Score: ${answer.score}`
);
}
Poin-poin penting:
-
answers.answerType: "extractive"memungkinkan jawaban ekstraktif untuk kueri yang menyerupai pertanyaan. - Jawabannya adalah konten verbatim yang diekstrak dari indeks Anda, bukan teks yang dihasilkan.
-
results.answersmengambil objek jawaban secara terpisah dari hasil pencarian.
Dalam panduan memulai cepat ini, Anda menggunakan REST API Pencarian Azure AI untuk menambahkan peringkat semantik ke indeks pencarian yang ada dan melakukan kueri pada indeks tersebut.
Peringkat semantik adalah fungsionalitas sisi kueri yang menggunakan pemahaman pembacaan mesin untuk mengodekan ulang hasil pencarian, mempromosikan kecocokan yang paling relevan secara semantik ke bagian atas daftar. Anda dapat menambahkan konfigurasi semantik ke indeks yang ada tanpa persyaratan pembangunan ulang. Peringkat semantik paling efektif untuk teks informasi atau deskriptif.
Tips
Ingin segera memulai? Unduh kode source di GitHub.
Prasyarat
Akun Azure dengan langganan aktif. Buat akun secara gratis.
Layanan Pencarian Azure AI.
Indeks dengan bidang teks deskriptif yang dikaitkan sebagai
searchabledanretrievable. Mulai cepat ini mengasumsikan indeks sampel hotel.Visual Studio Code dengan ekstensi Klien REST.
Git untuk mengkloning repositori sampel.
Azure CLI untuk autentikasi tanpa kunci dengan Microsoft Entra ID.
Mengonfigurasi akses
Sebelum memulai, pastikan Anda memiliki izin untuk mengakses konten dan operasi di Pencarian Azure AI. Mulai cepat ini menggunakan Microsoft Entra ID untuk autentikasi dan akses berbasis peran untuk otorisasi. Anda harus menjadi Pemilik atau Administrator Akses Pengguna untuk menetapkan peran. Jika peran tidak dapat dilakukan, gunakan autentikasi berbasis kunci sebagai gantinya.
Untuk mengonfigurasi akses berbasis peran yang direkomendasikan:
Aktifkan akses berbasis peran untuk layanan pencarian Anda.
Tetapkan peran berikut ke akun pengguna Anda.
Kontributor Layanan Pencarian
Pembaca Indeks Data Pencarian
Catatan
Tidak seperti panduan cepat lain yang membuat dan memuat indeks, panduan cepat ini menggunakan indeks yang sudah ada dan sudah berisi data, sehingga Anda tidak memerlukan peran Kontributor Data Indeks Pencarian.
Dapatkan titik akhir
Setiap layanan Pencarian Azure AI memiliki endpoint, yang merupakan URL unik yang mengidentifikasi dan menyediakan akses jaringan ke layanan. Di bagian selanjutnya, Anda menentukan titik akhir ini untuk menyambungkan ke layanan pencarian Anda secara terprogram.
Untuk mendapatkan titik akhir:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilih Gambaran Umum.
Catat titik akhir, yang akan terlihat seperti
https://my-service.search.windows.net.
Mulai dengan indeks
Langkah cepat ini memodifikasi indeks yang ada untuk menyertakan konfigurasi semantik. Kami merekomendasikan indeks contoh hotel, yang dapat Anda buat dalam hitungan menit menggunakan wizard di portal Azure.
Untuk menggunakan indeks yang berbeda, ganti nama indeks, nama bidang dalam konfigurasi semantik, dan nama bidang dalam pernyataan kueri select di seluruh kode sampel. Indeks Anda harus berisi bidang teks deskriptif yang dikaitkan sebagai searchable dan retrievable.
Untuk meninjau dan menjalankan kueri pada indeks sampel hotel sebelum pengurutan semantik:
Buka layanan pencarian Anda di portal Azure.
Dari panel kiri, pilihIndeks> pencarian.
Pilih hotel-sampel.
Pilih Konfigurasi semantik untuk melihat konfigurasi yang ada. Jika Anda mengaktifkan peringkat semantik selama alur pembuatan wizard, harus ada konfigurasi default.
Pilih Penjelajah pencarian, lalu pilih Tampilkan>tampilan JSON.
Tempelkan JSON berikut ke editor kueri.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Pilih Cari untuk menjalankan kueri.
Responsnya harus mirip dengan contoh berikut. Ini adalah kueri teks lengkap yang diberi peringkat oleh BM25, sehingga hasilnya cocok pada istilah kueri individual dan varian linguistik daripada arti keseluruhan kueri. Misalnya,
walkingmencocokkanwalk, danlivemencocokkanmusicsecara independen daripada sebagai frasa."@odata.count": 30, "value": [ { "@search.score": 5.004435, "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tips
Kueri ini memperlihatkan tampilan respons sebelum peringkat semantik diterapkan. Setelah Anda mengonfigurasi konfigurasi semantik, tambahkan
"queryType": "semantic"dan"semanticConfiguration": "semantic-config"untuk melihat bagaimana kueri yang sama diberi peringkat berbeda dengan peringkat semantik.
Siapkan lingkungan
Gunakan Git untuk mengkloning repositori sampel.
git clone https://github.com/Azure-Samples/azure-search-rest-samplesArahkan ke folder quickstart dan buka di Visual Studio Code.
cd azure-search-rest-samples/Quickstart-semantic-ranking code .Di
semantic-index-update.rest, ganti nilai tempat penampung untuk@searchUrldengan URL yang Anda peroleh di Dapatkan titik akhir.Ulangi langkah sebelumnya untuk
semantic-query.rest.Untuk autentikasi tanpa kunci dengan Microsoft Entra ID, masuk ke akun Azure Anda. Jika Anda memiliki beberapa langganan, pilih langganan yang berisi layanan Pencarian Azure AI Anda.
az loginUntuk autentikasi tanpa kunci dengan Microsoft Entra ID, buat token akses.
az account get-access-token --scope https://search.azure.com/.default --query accessToken --output tsvPada kedua file
.rest, ganti placeholder untuk@personalAccessTokendengan token dari langkah sebelumnya.
Jalankan kode
Buka
semantic-index-update.rest.Pilih Kirim Permintaan pada permintaan GET pertama untuk memverifikasi koneksi Anda.
Respons akan muncul di panel yang berdekatan. Jika Anda memiliki indeks yang sudah ada, indeks tersebut dicantumkan menurut nama. Jika kode HTTP adalah
200 OK, Anda siap untuk melanjutkan.### Update the hotels-sample index to include a semantic configurationKirim permintaan untuk menambahkan konfigurasi semantik ke indeks.Jika Anda mendapatkan kesalahan
400 Bad Request, skema indeks Anda berbeda dari contoh.### Get the schema of the indexKirim permintaan, salin respons JSON, tambahkansemanticbagian dari kode sumber ke JSON, dan ganti isi permintaan PUT dengan skema gabungan Anda.Beralih ke
semantic-query.restdan mengirim permintaan secara berurutan: kueri sederhana untuk perbandingan garis besar, lalu kueri semantik dengan peringkat, keterangan, dan jawaban.
Keluaran
Permintaan Send a search query to the hotels-sample index mengembalikan hasil yang diberi peringkat oleh relevansi BM25, yang ditunjukkan oleh bidang @search.score.
{
"@odata.count": 30,
"value": [
{
"@search.score": 5.004435,
"HotelId": "2",
"HotelName": "Old Century Hotel",
"Description": "The hotel is situated in a nineteenth century plaza..."
},
// Trimmed for brevity
]
}
Permintaan Send a search query to the hotels-sample index with semantic ranking menambahkan @search.rerankerScore. Perhatikan bahwa urutan berubah dari kueri sederhana.
{
"@odata.count": 30,
"@search.answers": [],
"value": [
{
"@search.score": 4.555706,
"@search.rerankerScore": 2.613231658935547,
"HotelId": "24",
"HotelName": "Uptown Chic Hotel",
"Description": "Chic hotel near the city. High-rise hotel in downtown..."
},
// Trimmed for brevity
]
}
Permintaan Return captions in the query menambahkan @search.captions dengan teks yang diekstrak dan sorotan.
{
"value": [
{
"@search.score": 4.555706,
"@search.rerankerScore": 2.613231658935547,
"@search.captions": [
{
"text": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops...",
"highlights": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops..."
}
],
"HotelId": "24",
"HotelName": "Uptown Chic Hotel"
},
// Trimmed for brevity
]
}
Permintaan Return semantic answers in the query mengembalikan jawaban ekstraktif dalam @search.answers saat kueri dirumuskan sebagai pertanyaan.
{
"@odata.count": 46,
"@search.answers": [
{
"key": "38",
"text": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night...",
"highlights": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night...",
"score": 0.9829999804496765
}
],
"value": [
{
"@search.score": 2.060124,
"@search.rerankerScore": 2.124817371368408,
"@search.captions": [
{
"text": "This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city...",
"highlights": "This classic hotel is<em> fully-refurbished </em>and ideally located on the main commercial artery of the city..."
}
],
"HotelId": "1",
"HotelName": "Stay-Kay City Hotel"
},
// Trimmed for brevity
]
}
Memahami kode
Catatan
Cuplikan kode di bagian ini mungkin telah dimodifikasi untuk keterbacaan. Untuk contoh kerja lengkap, lihat kode sumber.
Sekarang setelah Anda menjalankan kode, mari kita uraikan langkah-langkah kunci:
- Konfigurasi dan autentikasi
- Memperbarui indeks dengan konfigurasi semantik
- Menjalankan kueri pada indeks
Konfigurasi dan autentikasi
Kedua .rest file menentukan variabel di bagian atas untuk digunakan kembali di semua permintaan.
@searchUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
@personalAccessToken = PUT-YOUR-PERSONAL-ACCESS-TOKEN-HERE
@api-version = 2026-04-01
Poin-poin penting:
-
@searchUrladalah titik akhir layanan pencarian Anda. -
@personalAccessTokenadalah token Microsoft Entra ID yang diperoleh dari Azure CLI. Ini menggantikan kunci API dengan autentikasi tanpa kunci. -
Authorization: Bearer {{personalAccessToken}}disertakan dalam setiap header permintaan untuk autentikasi.
Memperbarui indeks dengan konfigurasi semantik
### Update the hotels-sample index to include a semantic configuration Permintaan dalam semantic-index-update.rest mengirim skema indeks lengkap bersama dengan bagian barusemantic. REST API memerlukan skema lengkap untuk operasi pembaruan apa pun, sehingga Anda tidak hanya dapat mengirim konfigurasi semantik.
Penambahan kunci adalah bagian semantic :
"semantic": {
"configurations": [
{
"name": "semantic-config",
"rankingOrder":
"BoostedRerankerScore",
"prioritizedFields": {
"titleField": {
"fieldName": "HotelName"
},
"prioritizedContentFields": [
{
"fieldName": "Description"
}
],
"prioritizedKeywordsFields": [
{
"fieldName": "Tags"
}
]
}
}
]
}
Poin-poin penting:
-
titleFieldmengidentifikasi bidang mana yang berisi judul dokumen untuk evaluasi semantik. -
prioritizedContentFieldsmengidentifikasi bidang konten utama. Pemeringkat semantik mengevaluasi hal-hal ini terlebih dahulu saat menilai relevansi. -
prioritizedKeywordsFieldsmengidentifikasi bidang kata kunci atau tag untuk konteks tambahan. -
rankingOrder: BoostedRerankerScoremenggabungkan skor BM25 dengan skor reranker semantik. - REST API memerlukan skema penuh untuk operasi PUT. Hanya bagian
semanticyang baru; semua bidang lain tidak berubah.
Melakukan kueri pada indeks
Permintaan semantic-query.rest berprogres dari pencarian kata kunci sederhana hingga peringkat semantik yang dilengkapi dengan keterangan dan jawaban. Semua kueri adalah permintaan POST ke Documents - Search Post (REST API).
Kueri sederhana
Permintaan ### Send a search query to the hotels-sample index ini adalah pencarian kata kunci sederhana yang tidak menggunakan peringkat semantik. Ini berfungsi sebagai garis besar untuk membandingkan hasil dengan dan tanpa reranking semantik.
{
"search":
"walking distance to live music",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "simple"
}
Poin-poin penting:
-
queryType: "simple"menggunakan algoritma peringkat BM25 default. - Hasil diberi peringkat berdasarkan relevansi kata kunci (
@search.score) saja.
Kueri semantik (tanpa keterangan, tidak ada jawaban)
Permintaan menambahkan pemeringkatan semantik ### Send a search query to the hotels-sample index with semantic ranking. JSON berikut menunjukkan persyaratan minimum untuk memanggil peringkat semantik.
{
"search":
"walking distance to live music",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "semantic",
"semanticConfiguration": "semantic-config"
}
Poin-poin penting:
-
queryType: "semantic"mengaktifkan peringkat semantik pada kueri. -
semanticConfigurationmenentukan konfigurasi semantik mana yang akan digunakan.
Kueri semantik dengan keterangan
Permintaan ini menambahkan keterangan tambahan untuk mengekstrak bagian yang paling relevan dari setiap hasil, dengan penyorotan yang menandai diterapkan pada istilah dan frasa penting.
{
"search":
"walking distance to live music",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "semantic",
"semanticConfiguration": "semantic-config",
"captions": "extractive|highlight-true"
}
Poin-poin penting:
-
captions: "extractive|highlight-true"memungkinkan keterangan ekstraktif dengan penandaan<em>di sekitar istilah penting. - Keterangan muncul dalam
@search.captionsarray untuk setiap hasil.
Kueri semantik dengan jawaban
Permintaan menambahkan jawaban semantik ### Return semantic answers in the query. Ini menggunakan pertanyaan sebagai teks pencarian karena jawaban semantik berfungsi paling baik ketika kueri diungkapkan sebagai pertanyaan. Jawabannya adalah kutipan verbatim yang diekstrak dari indeks Anda, bukan respons yang dibentuk oleh model penyelesaian obrolan.
Kueri dan konten terindeks harus diratakan erat agar jawaban dikembalikan. Jika tidak ada kandidat yang memenuhi ambang keyakinan, respons tidak menyertakan jawaban. Contoh ini menggunakan pertanyaan yang diketahui menghasilkan hasil sehingga Anda dapat melihat sintaksnya. Jika jawaban tidak berguna untuk skenario Anda, hilangkan answers parameter dari permintaan Anda. Untuk jawaban yang terstruktur, pertimbangkan pola RAG atau pengambilan informasi secara agenik.
{
"search":
"what's a good hotel for people who like to read",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "semantic",
"semanticConfiguration": "semantic-config",
"captions": "extractive|highlight-true",
"answers": "extractive"
}
Poin-poin penting:
-
answers: "extractive"memungkinkan jawaban ekstraktif untuk kueri yang menyerupai pertanyaan. - Jawaban muncul di array
@search.answerstingkat atas, terpisah dari hasil individual. - Jawabannya adalah konten verbatim yang diekstrak dari indeks Anda, bukan teks yang dihasilkan.
Membersihkan sumber daya
Saat Anda bekerja di langganan Anda sendiri, ada baiknya untuk menyelesaikan proyek dengan menghapus sumber daya yang tidak lagi Anda butuhkan. Sumber daya yang dibiarkan berjalan dapat menyebabkan biaya tambahan.
Di portal Azure, pilih Semua sumber daya atau Kelompok sumber daya dari panel kiri untuk menemukan dan mengelola sumber daya. Anda dapat menghapus sumber daya satu per satu atau menghapus grup sumber daya untuk menghapus semua sumber daya sekaligus.