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
- Criar um novo índice
- Importe dados com JavaScript usando o script bulk_insert_books e o SDK do Azure @azure/search-documents.
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.
No Visual Studio Code, em Terminal, selecione New Terminal.
Conecte-se ao Azure:
az login
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.
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
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
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
Preparar o script de importação em massa para Pesquisa
O script ESM usa o SDK do Azure para Azure AI Search:
No Visual Studio Code, abra o
bulk_insert_books.js
arquivo no subdiretório, ,search-website-functions-v4/bulk-insert
substitua 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');
Abra um terminal integrado no Visual Studio para o subdiretório
search-website-functions-v4/bulk-insert
do diretório do projeto e execute o seguinte comando para instalar as dependências.npm install
Executar o script de importação em massa para Pesquisa
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 obulk_insert_books.js
script:npm start
À medida que o código é executado, o console exibe o progresso.
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.
No portal do Azure, localize o serviço de pesquisa que você criou na etapa anterior.
À esquerda, selecione Índices e, em seguida, selecione o índice de bons livros.
Por padrão, o índice é aberto na guia Gerenciador de pesquisa . Selecione Pesquisar para retornar documentos do índice.
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.