2 - Buat dan muat Indeks Pencarian dengan JavaScript
Lanjutkan membangun situs web yang mendukung pencarian Anda dengan mengikuti langkah-langkah berikut:
- Membuat sumber daya pencarian
- Membuat indeks baru
- Impor data dengan JavaScript menggunakan skrip bulk_insert_books dan Azure SDK @azure/search-documents.
Membuat sumber daya Azure AI Search
Buat sumber daya pencarian baru dari baris perintah menggunakan Azure CLI atau Azure PowerShell. Anda juga mengambil kunci kueri yang digunakan untuk akses baca ke indeks, dan mendapatkan kunci admin bawaan yang digunakan untuk menambahkan objek.
Anda harus menginstal Azure CLI atau Azure PowerShell di perangkat Anda. Jika Anda bukan admin lokal di perangkat Anda, pilih Azure PowerShell dan gunakan Scope
parameter untuk dijalankan sebagai pengguna saat ini.
Catatan
Tugas ini tidak memerlukan ekstensi Visual Studio Code untuk Azure CLI dan Azure PowerShell. Visual Studio Code mengenali alat baris perintah tanpa ekstensi.
Di Visual Studio Code, di bawah Terminal, pilih Terminal Baru.
Hubungkan ke Azure:
az login
Sebelum membuat layanan pencarian baru, cantumkan layanan yang sudah ada untuk langganan Anda:
az resource list --resource-type Microsoft.Search/searchServices --output table
Jika Anda memiliki layanan yang ingin Anda gunakan, perhatikan nama, lalu lewati ke bagian berikutnya.
Buat layanan pencarian baru. Gunakan perintah berikut sebagai templat, mengganti nilai yang valid untuk grup sumber daya, nama layanan, tingkat, wilayah, partisi, dan replika. Pernyataan berikut menggunakan grup sumber daya "cognitive-search-demo-rg" yang dibuat pada langkah sebelumnya dan menentukan tingkat "gratis". Jika langganan Azure Anda sudah memiliki layanan pencarian gratis, tentukan tingkat yang dapat ditagih seperti "dasar" sebagai gantinya.
az search service create --name my-cog-search-demo-svc --resource-group cognitive-search-demo-rg --sku free --partition-count 1 --replica-count 1
Dapatkan kunci kueri yang memberikan akses baca ke layanan pencarian. Layanan pencarian disediakan dengan dua kunci admin dan satu kunci kueri. Ganti nama yang valid untuk grup sumber daya dan layanan pencarian. Salin kunci kueri ke Notepad sehingga Anda bisa menempelkannya ke kode klien di langkah selanjutnya:
az search query-key list --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
Dapatkan kunci API admin layanan pencarian. Kunci API admin menyediakan akses tulis ke layanan pencarian. Salin salah satu kunci admin ke Notepad sehingga Anda dapat menggunakannya di langkah impor massal yang membuat dan memuat indeks:
az search admin-key show --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
Menyiapkan skrip impor massal untuk Pencarian
Skrip ESM menggunakan Azure SDK untuk Azure AI Search:
Di Visual Studio Code, buka file
bulk_insert_books.js
dalam subdirektori,search-website-functions-v4/bulk-insert
, ganti variabel berikut dengan nilai Anda sendiri untuk diautentikasi dengan Azure Search SDK:- YOUR-SEARCH-RESOURCE-NAME
- KUNCI-ADMIN-PENCARIAN-ANDA
import fetch from 'node-fetch'; import Papa from 'papaparse'; import { SearchClient, SearchIndexClient, AzureKeyCredential } from '@azure/search-documents'; // Azure AI Search resource settings const SEARCH_ENDPOINT = 'https://YOUR-RESOURCE-NAME.search.windows.net'; const SEARCH_ADMIN_KEY = 'YOUR-RESOURCE-ADMIN-KEY'; // Azure AI Search index settings const SEARCH_INDEX_NAME = 'good-books'; import SEARCH_INDEX_SCHEMA from './good-books-index.json' assert { type: 'json' }; // Data settings const BOOKS_URL = 'https://raw.githubusercontent.com/Azure-Samples/azure-search-sample-data/main/good-books/books.csv'; const BATCH_SIZE = 1000; // Create Search service client // used to upload docs into Index const client = new SearchClient( SEARCH_ENDPOINT, SEARCH_INDEX_NAME, new AzureKeyCredential(SEARCH_ADMIN_KEY) ); // Create Search service Index client // used to create new Index const clientIndex = new SearchIndexClient( SEARCH_ENDPOINT, new AzureKeyCredential(SEARCH_ADMIN_KEY) ); // Insert docs into Search Index // in batch const insertData = async (data) => { let batch = 0; let batchArray = []; for (let i = 0; i < data.length; i++) { const row = data[i]; // Convert string data to typed data // Types are defined in schema batchArray.push({ id: row.book_id, goodreads_book_id: parseInt(row.goodreads_book_id), best_book_id: parseInt(row.best_book_id), work_id: parseInt(row.work_id), books_count: !row.books_count ? 0 : parseInt(row.books_count), isbn: row.isbn, isbn13: row.isbn13, authors: row.authors.split(',').map((name) => name.trim()), original_publication_year: !row.original_publication_year ? 0 : parseInt(row.original_publication_year), original_title: row.original_title, title: row.title, language_code: row.language_code, average_rating: !row.average_rating ? 0 : parseFloat(row.average_rating), ratings_count: !row.ratings_count ? 0 : parseInt(row.ratings_count), work_ratings_count: !row.work_ratings_count ? 0 : parseInt(row.work_ratings_count), work_text_reviews_count: !row.work_text_reviews_count ? 0 : parseInt(row.work_text_reviews_count), ratings_1: !row.ratings_1 ? 0 : parseInt(row.ratings_1), ratings_2: !row.ratings_2 ? 0 : parseInt(row.ratings_2), ratings_3: !row.ratings_3 ? 0 : parseInt(row.ratings_3), ratings_4: !row.ratings_4 ? 0 : parseInt(row.ratings_4), ratings_5: !row.ratings_5 ? 0 : parseInt(row.ratings_5), image_url: row.image_url, small_image_url: row.small_image_url }); console.log(`${i}`); // Insert batch into Index if (batchArray.length % BATCH_SIZE === 0) { await client.uploadDocuments(batchArray); console.log(`BATCH SENT`); batchArray = []; } } // Insert any final batch into Index if (batchArray.length > 0) { await client.uploadDocuments(batchArray); console.log(`FINAL BATCH SENT`); batchArray = []; } }; const bulkInsert = async () => { // Download CSV Data file const response = await fetch(BOOKS_URL, { method: 'GET' }); if (response.ok) { console.log(`book list fetched`); const fileData = await response.text(); console.log(`book list data received`); // convert CSV to JSON const dataObj = Papa.parse(fileData, { header: true, encoding: 'utf8', skipEmptyLines: true }); console.log(`book list data parsed`); // Insert JSON into Search Index await insertData(dataObj.data); console.log(`book list data inserted`); } else { console.log(`Couldn\t download data`); } }; // Create Search Index async function createIndex() { SEARCH_INDEX_SCHEMA.name = SEARCH_INDEX_NAME; const result = await clientIndex.createIndex(SEARCH_INDEX_SCHEMA); } await createIndex(); console.log('index created'); await bulkInsert(); console.log('data inserted into index');
Buka terminal terintegrasi di Visual Studio untuk subdirektori direktori proyek,
search-website-functions-v4/bulk-insert
, lalu jalankan perintah berikut untuk memasang dependensi.npm install
Menjalankan skrip impor massal untuk Pencarian
Lanjutkan menggunakan terminal terintegrasi di Visual Studio untuk subdirektori direktori proyek,
search-website-functions-v4/bulk-insert
, untuk menjalankanbulk_insert_books.js
skrip:npm start
Saat kode berjalan, konsol menampilkan kemajuan.
Saat unggahan selesai, pernyataan terakhir yang dicetak ke konsol adalah "Selesai".
Meninjau indeks pencarian baru
Setelah unggahan selesai, indeks pencarian siap digunakan. Tinjau indeks baru Anda di portal Azure.
Di portal Azure, temukan layanan pencarian yang Anda buat di langkah sebelumnya.
Di sebelah kiri, pilih Indeks, lalu pilih indeks buku bagus.
Secara default, indeks terbuka di tab Penjelajah pencarian. Pilih Cari untuk mengembalikan dokumen dari indeks.
Mengembalikan perubahan file impor massal
Gunakan perintah git berikut di terminal terintegrasi Visual Studio Code di bulk-insert
direktori, untuk mengembalikan perubahan. Mereka tidak diperlukan untuk melanjutkan tutorial dan Anda tidak boleh menyimpan atau mendorong rahasia ini ke repositori Anda.
git checkout .
Menyalin nama sumber daya Pencarian Anda
Perhatikan nama sumber daya Pencarian Anda. Anda akan memerlukan ini untuk menyambungkan aplikasi Azure Function ke sumber daya pencarian Anda.
Perhatian
Meskipun Anda mungkin tergoda untuk menggunakan kunci admin pencarian Anda di Azure Function, itu tidak mengikuti prinsip hak istimewa paling sedikit. Azure Function akan menggunakan tombol kueri untuk menyesuaikan dengan hak istimewa minimal.