Share via


2 - Zoekindex maken en laden met JavaScript

Ga door met het bouwen van uw website met zoekmogelijkheden door de volgende stappen uit te voeren:

Een Azure AI Search-resource maken

Maak een nieuwe zoekresource vanaf de opdrachtregel met behulp van de Azure CLI of Azure PowerShell. U haalt ook een querysleutel op die wordt gebruikt voor leestoegang tot de index en haalt de ingebouwde beheersleutel op die wordt gebruikt voor het toevoegen van objecten.

U moet Azure CLI of Azure PowerShell op uw apparaat hebben geïnstalleerd. Als u geen lokale beheerder op uw apparaat bent, kiest u Azure PowerShell en gebruikt u de Scope parameter om als de huidige gebruiker uit te voeren.

Notitie

Voor deze taak zijn de Visual Studio Code-extensies voor Azure CLI en Azure PowerShell niet vereist. Visual Studio Code herkent de opdrachtregelprogramma's zonder de extensies.

  1. Selecteer in Visual Studio Code onder Terminal de optie Nieuwe terminal.

  2. Verbinding maken naar Azure:

    az login
    
  3. Voordat u een nieuwe zoekservice maakt, vermeldt u de bestaande services voor uw abonnement:

    az resource list --resource-type Microsoft.Search/searchServices --output table
    

    Als u een service hebt die u wilt gebruiken, noteert u de naam en gaat u verder naar de volgende sectie.

  4. Maak een nieuwe zoekservice. Gebruik de volgende opdracht als sjabloon, waarbij u geldige waarden vervangt door de resourcegroep, servicenaam, laag, regio, partities en replica's. De volgende instructie maakt gebruik van de resourcegroep cognitive-search-demo-rg die in een vorige stap is gemaakt en geeft de 'gratis' laag op. Als uw Azure-abonnement al een gratis zoekservice heeft, geeft u in plaats daarvan een factureerbare laag op, zoals Basic.

    az search service create --name my-cog-search-demo-svc --resource-group cognitive-search-demo-rg --sku free --partition-count 1 --replica-count 1
    
  5. Haal een querysleutel op die leestoegang verleent tot een zoekservice. Een zoekservice wordt ingericht met twee beheerderssleutels en één querysleutel. Vervang geldige namen voor de resourcegroep en zoekservice. Kopieer de querysleutel naar Kladblok, zodat u deze in een latere stap in de clientcode kunt plakken:

    az search query-key list --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
    
  6. Haal een API-sleutel voor de zoekservicebeheerder op. Een beheer-API-sleutel biedt schrijftoegang tot de zoekservice. Kopieer een van de beheerderssleutels naar Kladblok zodat u deze kunt gebruiken in de stap voor bulkimport waarmee een index wordt gemaakt en geladen:

    az search admin-key show --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
    

Het ESM-script maakt gebruik van de Azure SDK voor Azure AI Search:

  1. Open in Visual Studio Code het bulk_insert_books.js bestand in de submap, search-website-functions-v4/bulk-insertvervang de volgende variabelen door uw eigen waarden om te verifiëren met de Azure Search SDK:

    • NAAM VAN UW ZOEK-RESOURCE
    • UW ZOEK-ADMIN-SLEUTEL
    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');
    
  2. Open een geïntegreerde terminal in Visual Studio voor de submap search-website-functions-v4/bulk-insertvan de projectmap en voer de volgende opdracht uit om de afhankelijkheden te installeren.

    npm install 
    
  1. Ga door met het gebruik van de geïntegreerde terminal in Visual Studio voor de submap search-website-functions-v4/bulk-insertvan de projectmap om het bulk_insert_books.js script uit te voeren:

    npm start
    
  2. Terwijl de code wordt uitgevoerd, wordt de voortgang van de console weergegeven.

  3. Wanneer het uploaden is voltooid, wordt de laatste instructie die naar de console wordt afgedrukt, uitgevoerd.

De nieuwe zoekindex controleren

Zodra het uploaden is voltooid, is de zoekindex klaar voor gebruik. Controleer uw nieuwe index in Azure Portal.

  1. Zoek in Azure Portal de zoekservice die u in de vorige stap hebt gemaakt.

  2. Selecteer aan de linkerkant Indexen en selecteer vervolgens de index good-books.

    Expandable screenshot of Azure portal showing the index.

  3. De index wordt standaard geopend op het tabblad Search Explorer . Selecteer Zoeken om documenten uit de index te retourneren.

    Expandable screenshot of Azure portal showing search results

Wijzigingen in bulksgewijs importeren van bestanden terugdraaien

Gebruik de volgende Git-opdracht in de geïntegreerde Terminal van Visual Studio Code in de bulk-insert map om de wijzigingen terug te draaien. Ze zijn niet nodig om door te gaan met de zelfstudie en u moet deze geheimen niet opslaan of naar uw opslagplaats pushen.

git checkout .

De naam van uw zoekresource kopiëren

Noteer de naam van uw zoekresource. U hebt deze nodig om de Azure Function-app te verbinden met uw zoekresource.

Let op

Hoewel u misschien geneigd bent om uw zoekbeheerderssleutel in de Azure-functie te gebruiken, volgt dat niet het principe van minimale bevoegdheden. De Azure-functie gebruikt de querysleutel om te voldoen aan minimale bevoegdheden.

Volgende stappen

Uw statische web-app implementeren