Share via


2 - Criar e carregar índice de pesquisa com JavaScript

Continue a criar seu site habilitado para pesquisa seguindo estas etapas:

Criar um recurso de Pesquisa de IA do Azure

Crie um novo recurso de pesquisa a partir da linha de comando usando a CLI do Azure ou o Azure PowerShell. Você também recupera uma chave de consulta usada para acesso de leitura ao índice e obtém a chave de administração interna usada para adicionar objetos.

Você deve ter a CLI do Azure ou o Azure PowerShell instalado em seu dispositivo. Se você não for um administrador local em seu dispositivo, escolha Azure PowerShell e use o parâmetro para executar como o Scope usuário atual.

Nota

Esta tarefa não requer as extensões de código do Visual Studio para a CLI do Azure e o Azure PowerShell. O Visual Studio Code reconhece as ferramentas de linha de comando sem as extensões.

  1. No Visual Studio Code, em Terminal, selecione New Terminal.

  2. Conecte-se ao Azure:

    az login
    
  3. Antes de criar um novo serviço de pesquisa, liste os serviços existentes para sua assinatura:

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

    Se tiver um serviço que pretende utilizar, anote o nome e, em seguida, avance para a secção seguinte.

  4. Crie um novo serviço de pesquisa. Use o comando a seguir como modelo, substituindo valores válidos para o grupo de recursos, nome do serviço, camada, região, partições e réplicas. A instrução a seguir usa o grupo de recursos "cognitive-search-demo-rg" criado em uma etapa anterior e especifica a camada "livre". Se sua assinatura do Azure já tiver um serviço de pesquisa gratuito, especifique uma camada faturável, como "básica".

    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. Obtenha uma chave de consulta que conceda acesso de leitura a um serviço de pesquisa. Um serviço de pesquisa é provisionado com duas chaves de administrador e uma chave de consulta. Substitua nomes válidos para o grupo de recursos e o serviço de pesquisa. Copie a chave de consulta para o bloco de notas para que você possa colá-la no código do cliente em uma etapa posterior:

    az search query-key list --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
    
  6. Obtenha uma chave de API de administração do serviço de pesquisa. Uma chave de API admin fornece acesso de gravação ao serviço de pesquisa. Copie uma das chaves de administração para o Bloco de Notas para que você possa usá-la na etapa de importação em massa que cria e carrega um índice:

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

O script ESM usa o SDK do Azure para Azure AI Search:

  1. No Visual Studio Code, abra o bulk_insert_books.js arquivo no subdiretório, , search-website-functions-v4/bulk-insertsubstitua as seguintes variáveis por seus próprios valores para autenticar com o SDK do Azure Search:

    • SEU-NOME-PESQUISA-RECURSO-
    • SUA-CHAVE-DE-PESQUISA-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');
    
  2. Abra um terminal integrado no Visual Studio para o subdiretório search-website-functions-v4/bulk-insertdo diretório do projeto e execute o seguinte comando para instalar as dependências.

    npm install 
    
  1. Continue usando o terminal integrado no Visual Studio para o subdiretório do diretório do projeto, , search-website-functions-v4/bulk-insertpara executar o bulk_insert_books.js script:

    npm start
    
  2. À medida que o código é executado, o console exibe o progresso.

  3. Quando o upload estiver concluído, a última instrução impressa no console será "concluída".

Rever o novo índice de pesquisa

Quando o carregamento for concluído, o índice de pesquisa estará pronto para ser usado. Reveja o seu novo índice no portal do Azure.

  1. No portal do Azure, localize o serviço de pesquisa que você criou na etapa anterior.

  2. À esquerda, selecione Índices e, em seguida, selecione o índice de bons livros.

    Expandable screenshot of Azure portal showing the index.

  3. Por padrão, o índice é aberto na guia Gerenciador de pesquisa . Selecione Pesquisar para retornar documentos do índice.

    Expandable screenshot of Azure portal showing search results

Reversão de alterações de arquivos de importação em massa

Use o seguinte comando git no terminal integrado do Visual Studio Code no bulk-insert diretório para reverter as alterações. Eles não são necessários para continuar o tutorial e você não deve salvar ou enviar esses segredos para o seu repositório.

git checkout .

Copie o nome do recurso de Pesquisa

Anote o nome do recurso de pesquisa. Você precisará disso para conectar o aplicativo Azure Function ao seu recurso de pesquisa.

Atenção

Embora você possa ficar tentado a usar sua chave de administração de pesquisa na Função do Azure, isso não está seguindo o princípio de menor privilégio. A Função do Azure usará a chave de consulta para estar em conformidade com o menor privilégio.

Próximos passos

Implante seu aplicativo Web estático