Aracılığıyla paylaş


2 - JavaScript ile Arama Dizini oluşturma ve yükleme

Şu adımları izleyerek arama özellikli web sitenizi oluşturmaya devam edin:

Azure AI Search kaynağı oluşturma

Azure CLI veya Azure PowerShell kullanarak komut satırından yeni bir arama kaynağı oluşturun. Ayrıca dizine okuma erişimi için kullanılan bir sorgu anahtarı alırsınız ve nesneleri eklemek için kullanılan yerleşik yönetici anahtarını alırsınız.

Cihazınızda Azure CLI veya Azure PowerShell yüklü olmalıdır. Cihazınızda yerel yönetici değilseniz Azure PowerShell'i seçin ve geçerli kullanıcı olarak çalıştırmak için parametresini kullanın Scope .

Not

Bu görev, Azure CLI ve Azure PowerShell için Visual Studio Code uzantıları gerektirmez. Visual Studio Code, uzantılar olmadan komut satırı araçlarını tanır.

  1. Visual Studio Code'da, Terminal'in altında Yeni Terminal'i seçin.

  2. Azure'a bağlanın:

    az login
    
  3. Yeni bir arama hizmeti oluşturmadan önce aboneliğiniz için mevcut hizmetleri listeleyin:

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

    Kullanmak istediğiniz bir hizmetiniz varsa, adı not edin ve sonraki bölüme geçin.

  4. Yeni bir arama hizmeti oluşturun. Kaynak grubu, hizmet adı, katman, bölge, bölümler ve çoğaltmalar için geçerli değerlerin yerine şablon olarak aşağıdaki komutu kullanın. Aşağıdaki deyim, önceki bir adımda oluşturulan "cognitive-search-demo-rg" kaynak grubunu kullanır ve "ücretsiz" katmanını belirtir. Azure aboneliğinizde zaten ücretsiz bir arama hizmeti varsa bunun yerine "temel" gibi faturalanabilir bir katman belirtin.

    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. Arama hizmetine okuma erişimi veren bir sorgu anahtarı alın. İki yönetici anahtarı ve bir sorgu anahtarı ile bir arama hizmeti sağlanır. Kaynak grubu ve arama hizmeti için geçerli adları kullanın. Sonraki bir adımda istemci koduna yapıştırabilmek için sorgu anahtarını Not Defteri'ne kopyalayın:

    az search query-key list --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
    
  6. Bir arama hizmeti yöneticisi API anahtarı alın. Yönetici API anahtarı, arama hizmetine yazma erişimi sağlar. Dizin oluşturan ve yükleyen toplu içeri aktarma adımında kullanabilmek için, yönetici anahtarlarından birini Not Defteri'ne kopyalayın:

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

ESM betiği, Azure AI Search için Azure SDK'sını kullanır:

  1. Visual Studio Code'da dosyasını alt dizininde açın bulk_insert_books.js ve search-website-functions-v4/bulk-insertAzure Search SDK'sı ile kimlik doğrulaması yapmak için aşağıdaki değişkenleri kendi değerlerinizle değiştirin:

    • ADıNıZ-ARAMA-KAYNAK-ADI
    • ARAMA-YÖNETICI ANAHTARıNıZ
    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. Proje dizininin alt dizini search-website-functions-v4/bulk-insertiçin Visual Studio'da tümleşik bir terminal açın ve bağımlılıkları yüklemek için aşağıdaki komutu çalıştırın.

    npm install 
    
  1. Visual Studio'da proje dizininin alt dizini search-website-functions-v4/bulk-insertolan tümleşik terminali kullanarak betiği çalıştırmaya bulk_insert_books.js devam edin:

    npm start
    
  2. Kod çalışırken konsol ilerleme durumunu görüntüler.

  3. Karşıya yükleme tamamlandığında konsola yazdırılan son deyim "bitti" olur.

Yeni arama dizinini gözden geçirme

Karşıya yükleme tamamlandıktan sonra arama dizini kullanıma hazır olur. Azure portalında yeni dizininizi gözden geçirin.

  1. Azure portalında, önceki adımda oluşturduğunuz arama hizmetini bulun.

  2. Sol tarafta Dizinler'i ve ardından good-books dizinini seçin.

    Dizini gösteren Azure portalının genişletilebilir ekran görüntüsü.

  3. Varsayılan olarak, dizin Arama gezgini sekmesinde açılır. Dizinden belge döndürmek için Ara'yı seçin.

    Arama sonuçlarını gösteren Azure portalının genişletilebilir ekran görüntüsü

Toplu içeri aktarma dosyası değişikliklerini geri alma

Değişiklikleri geri almak için dizindeki Visual Studio Code tümleşik terminalinde bulk-insert aşağıdaki git komutunu kullanın. Öğreticiye devam etmek için gerekli değildir ve bu gizli dizileri deponuza kaydetmemeniz veya göndermemeniz gerekir.

git checkout .

Arama kaynağı adınızı kopyalayın

Arama kaynağı adınızı not edin. Azure İşlevi uygulamasını arama kaynağınıza bağlamak için buna ihtiyacınız olacaktır.

Dikkat

Azure İşlevi'nde arama yöneticisi anahtarınızı kullanmak isteyebilirsiniz ancak bu, en düşük ayrıcalık ilkesine uymaz. Azure İşlevi, sorgu anahtarını kullanarak en az ayrıcalığı kullanır.

Sonraki adımlar

Statik Web Uygulamanızı dağıtma