2 — Tworzenie i ładowanie indeksu wyszukiwania za pomocą języka JavaScript
Kontynuuj tworzenie witryny internetowej obsługującej wyszukiwanie, wykonując następujące kroki:
- Tworzenie zasobu wyszukiwania
- Tworzenie nowego indeksu
- Importowanie danych za pomocą języka JavaScript przy użyciu skryptubulk_insert_books i zestawu Azure SDK @azure/search-documents.
Tworzenie zasobu usługi Azure AI Search
Utwórz nowy zasób wyszukiwania z poziomu wiersza polecenia przy użyciu interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell. Pobierasz również klucz zapytania używany do odczytu do indeksu i uzyskujesz wbudowany klucz administracyjny używany do dodawania obiektów.
Na urządzeniu musi być zainstalowany interfejs wiersza polecenia platformy Azure lub program Azure PowerShell . Jeśli nie jesteś administratorem lokalnym na urządzeniu, wybierz program Azure PowerShell i użyj parametru Scope
, aby uruchomić go jako bieżący użytkownik.
Uwaga
To zadanie nie wymaga rozszerzeń programu Visual Studio Code dla interfejsu wiersza polecenia platformy Azure i programu Azure PowerShell. Program Visual Studio Code rozpoznaje narzędzia wiersza polecenia bez rozszerzeń.
W programie Visual Studio Code w obszarze Terminal wybierz pozycję Nowy terminal.
Połączenie na platformę Azure:
az login
Przed utworzeniem nowej usługi wyszukiwania wyświetl listę istniejących usług dla subskrypcji:
az resource list --resource-type Microsoft.Search/searchServices --output table
Jeśli masz usługę, której chcesz użyć, zanotuj nazwę, a następnie przejdź do następnej sekcji.
Utwórz nową usługę wyszukiwania. Użyj następującego polecenia jako szablonu, podstawiając prawidłowe wartości dla grupy zasobów, nazwy usługi, warstwy, regionu, partycji i replik. Poniższa instrukcja używa grupy zasobów "cognitive-search-demo-rg" utworzonej w poprzednim kroku i określa warstwę "bezpłatna". Jeśli Twoja subskrypcja platformy Azure ma już bezpłatną usługę wyszukiwania, określ warstwę rozliczaną, taką jak "podstawowa".
az search service create --name my-cog-search-demo-svc --resource-group cognitive-search-demo-rg --sku free --partition-count 1 --replica-count 1
Pobierz klucz zapytania, który udziela dostępu do odczytu do usługi wyszukiwania. Usługa wyszukiwania jest aprowizowana przy użyciu dwóch kluczy administracyjnych i jednego klucza zapytania. Zastąp prawidłowe nazwy grupy zasobów i usługi wyszukiwania. Skopiuj klucz zapytania do Notatnik, aby można było wkleić go do kodu klienta w późniejszym kroku:
az search query-key list --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
Pobierz klucz interfejsu API administratora usługi wyszukiwania. Klucz interfejsu API administratora zapewnia dostęp do zapisu w usłudze wyszukiwania. Skopiuj jeden z kluczy administratora, aby Notatnik, aby można było go użyć w kroku importu zbiorczego, który tworzy i ładuje indeks:
az search admin-key show --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
Przygotowywanie skryptu importu zbiorczego do wyszukiwania
Skrypt PLATFORMy ESM używa zestawu Azure SDK dla usługi Azure AI Search:
W programie Visual Studio Code otwórz
bulk_insert_books.js
plik w podkatalogu ,search-website-functions-v4/bulk-insert
zastąp następujące zmienne własnymi wartościami, aby uwierzytelnić się przy użyciu zestawu SDK usługi Azure Search:- NAZWA ZASOBU WYSZUKIWANIA
- TWÓJ-SEARCH-ADMIN-KEY
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');
Otwórz zintegrowany terminal w programie Visual Studio dla podkatalogu katalogu projektu i uruchom następujące polecenie,
search-website-functions-v4/bulk-insert
aby zainstalować zależności.npm install
Uruchamianie skryptu importu zbiorczego dla wyszukiwania
Kontynuuj korzystanie ze zintegrowanego terminalu w programie Visual Studio dla podkatalogu katalogu projektu,
search-website-functions-v4/bulk-insert
, aby uruchomićbulk_insert_books.js
skrypt:npm start
W miarę uruchamiania kodu w konsoli jest wyświetlany postęp.
Po zakończeniu przekazywania ostatnia instrukcja wydrukowana w konsoli jest "zakończona".
Przeglądanie nowego indeksu wyszukiwania
Po zakończeniu przekazywania indeks wyszukiwania jest gotowy do użycia. Przejrzyj nowy indeks w witrynie Azure Portal.
W witrynie Azure Portal znajdź usługę wyszukiwania utworzoną w poprzednim kroku.
Po lewej stronie wybierz pozycję Indeksy, a następnie wybierz indeks good-books.
Domyślnie indeks zostanie otwarty na karcie Eksplorator wyszukiwania. Wybierz pozycję Wyszukaj , aby zwrócić dokumenty z indeksu.
Wycofywanie zmian pliku importu zbiorczego
Użyj następującego polecenia git w zintegrowanym terminalu programu Visual Studio Code w bulk-insert
katalogu, aby wycofać zmiany. Nie są one potrzebne do kontynuowania samouczka i nie należy zapisywać ani wypychać tych wpisów tajnych do repozytorium.
git checkout .
Kopiowanie nazwy zasobu wyszukiwania
Zanotuj nazwę zasobu wyszukiwania. Będzie to konieczne, aby połączyć aplikację funkcji platformy Azure z zasobem wyszukiwania.
Uwaga
Chociaż możesz być kuszony, aby użyć klucza administratora wyszukiwania w funkcji platformy Azure, to nie jest zgodna z zasadą najniższych uprawnień. Funkcja platformy Azure użyje klucza zapytania w celu zachowania zgodności z najniższymi uprawnieniami.