Share via


2 – Criar e carregar o índice de Pesquisa com JavaScript

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

Criar um recurso do Azure AI Search

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 integrada usada para adicionar objetos.

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

Observação

Essa tarefa não exige as extensões do Visual Studio Code 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 Novo Terminal.

  2. Conectar-se ao Azure:

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

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

    Se você tiver um serviço que deseja usar, anote o nome e pule para a próxima seção.

  4. Crie um serviço de pesquisa. Use o comando a seguir como modelo, substituindo os valores válidos para o grupo de recursos, o nome do serviço, a camada, a região, as partições e as 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 "gratuita". Se a 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 administração e uma chave de consulta. Substitua os nomes válidos do grupo de recursos e do serviço de pesquisa. Copie a chave de consulta para o Bloco de Notas a fim de 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 de administrador fornece acesso de gravação ao serviço de pesquisa. Copie uma das chaves de administração para o Bloco de Notas a fim de 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 do ESM usa o SDK do Azure para Azure AI Search:

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

    • NOME-DO-RECURSO-DE-PESQUISA
    • CHAVE-DE-ADMINISTRADOR-DE-PESQUISA
    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 do diretório do projeto, search-website-functions-v4/bulk-insert, e execute o comando a seguir 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-insert, para executar o script bulk_insert_books.js:

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

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

Examinar o novo índice de pesquisa

Quando o upload for concluído, o índice de pesquisa estará pronto para uso. Examine 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 os documentos do índice.

    Expandable screenshot of Azure portal showing search results

Reverter alterações de arquivo de importação em massa

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

git checkout .

Copiar o nome do recurso de Pesquisa

Anote o nome do recurso de Pesquisa. Eles serão necessários para conectar o aplicativo Azure Function ao recurso de pesquisa.

Cuidado

Embora seja possível usar a chave de administração de pesquisa no Azure Function, isso não está de acordo com o princípio de privilégio mínimo. A Função do Azure usará a chave de consulta para estar em conformidade com o privilégio mínimo.

Próximas etapas

Implantar seu Aplicativo Web Estático