Megosztás a következőn keresztül:


2 – Keresési index létrehozása és betöltése JavaScript használatával

Folytassa a kereséssel kompatibilis webhely összeállítását az alábbi lépések végrehajtásával:

  • Keresési erőforrás létrehozása
  • Új index létrehozása
  • Adatok importálása JavaScript használatával a bulk_insert_books szkript és az Azure SDK @azure/search-documents használatával.

Azure AI Search-erőforrás létrehozása

Hozzon létre egy új keresési erőforrást a parancssorból az Azure CLI vagy az Azure PowerShell használatával. Lekérhet egy lekérdezési kulcsot is, amely az index olvasási elérésére szolgál, és lekéri az objektumok hozzáadásához használt beépített rendszergazdai kulcsot.

Az eszközön telepítve kell lennie az Azure CLI-nek vagy az Azure PowerShellnek. Ha nem helyi rendszergazda az eszközön, válassza az Azure PowerShellt, és használja a Scope paramétert az aktuális felhasználóként való futtatáshoz.

Feljegyzés

Ehhez a feladathoz nem szükséges az Azure CLI és az Azure PowerShell Visual Studio Code-bővítménye. A Visual Studio Code felismeri a parancssori eszközöket bővítmények nélkül.

  1. A Visual Studio Code Terminál területén válassza az Új terminál lehetőséget.

  2. Csatlakozás az Azure-hoz:

    az login
    
  3. Új keresési szolgáltatás létrehozása előtt listázhatja az előfizetéséhez tartozó meglévő szolgáltatásokat:

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

    Ha van egy használni kívánt szolgáltatása, jegyezze fel a nevet, majd ugorjon tovább a következő szakaszra.

  4. Hozzon létre egy új keresési szolgáltatást. Használja a következő parancsot sablonként, és helyettesítse az erőforráscsoport, a szolgáltatásnév, a réteg, a régió, a partíciók és a replikák érvényes értékeit. Az alábbi utasítás az előző lépésben létrehozott "cognitive-search-demo-rg" erőforráscsoportot használja, és megadja az "ingyenes" szintet. Ha az Azure-előfizetése már rendelkezik ingyenes keresési szolgáltatással, adjon meg egy számlázható szintet, például az "alapszintűt".

    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. Lekérhet egy lekérdezési kulcsot, amely olvasási hozzáférést biztosít egy keresési szolgáltatáshoz. A keresési szolgáltatás két rendszergazdai kulccsal és egy lekérdezési kulccsal van kiépítve. Cserélje le az erőforráscsoport és a keresési szolgáltatás érvényes nevét. Másolja a lekérdezési kulcsot a Jegyzettömbbe, hogy egy későbbi lépésben beilleszthesse azt az ügyfélkódba:

    az search query-key list --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
    
  6. Keresési szolgáltatás rendszergazdai API-kulcsának lekérése. A rendszergazdai API-kulcs írási hozzáférést biztosít a keresési szolgáltatáshoz. Másolja az egyik rendszergazdai kulcsot a Jegyzettömbbe, hogy az indexet létrehozó és betöltő tömeges importálási lépésben használhassa:

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

Az ESM-szkript az Azure SDK-t használja az Azure AI Searchhöz:

  1. A Visual Studio Code-ban nyissa meg a bulk_insert_books.js fájlt az alkönyvtárban, search-website-functions-v4/bulk-insertés cserélje le a következő változókat a saját értékeire az Azure Search SDK-val való hitelesítéshez:

    • ÖN-SEARCH-RESOURCE-NAME
    • YOUR-SEARCH-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. Nyisson meg egy integrált terminált a Visual Studióban a projektkönyvtár alkönyvtárához, search-website-functions-v4/bulk-insertés futtassa a következő parancsot a függőségek telepítéséhez.

    npm install 
    
  1. A szkript futtatásához bulk_insert_books.js folytassa a Visual Studio integrált termináljának használatát a projektkönyvtár alkönyvtáráhozsearch-website-functions-v4/bulk-insert:

    npm start
    
  2. A kód futtatásakor a konzol megjeleníti az előrehaladást.

  3. Amikor a feltöltés befejeződött, a konzolra nyomtatott utolsó utasítás "kész".

Az új keresési index áttekintése

A feltöltés befejezése után a keresési index készen áll a használatra. Tekintse át az új indexet az Azure Portalon.

  1. Az Azure Portalon keresse meg az előző lépésben létrehozott keresési szolgáltatást .

  2. A bal oldalon válassza az Indexek lehetőséget, majd a jó könyvek indexét.

    Az Indexet megjelenítő Azure Portal bővíthető képernyőképe.

  3. Alapértelmezés szerint az index a Kereséskezelő lapon nyílik meg. A Keresés gombra kattintva dokumentumokat ad vissza az indexből.

    Az Azure Portal kiterjeszthető képernyőképe a keresési eredményekről

Tömeges importálási fájlmódosítások visszaállítása

A módosítások visszaállításához használja az alábbi Git-parancsot a bulk-insert Visual Studio Code integrált termináljában. Ezekre nincs szükség az oktatóanyag folytatásához, és ezeket a titkos kulcsokat nem szabad mentenie vagy leküldnie az adattárba.

git checkout .

A Keresési erőforrás nevének másolása

Jegyezze fel a keresési erőforrás nevét. Erre szüksége lesz az Azure-függvényalkalmazás és a keresési erőforrás összekapcsolásához.

Figyelemfelhívás

Bár előfordulhat, hogy a keresési rendszergazdai kulcsot az Azure-függvényben szeretné használni, ez nem követi a minimális jogosultság elvét. Az Azure-függvény a lekérdezési kulccsal felel meg a minimális jogosultságnak.

Következő lépések

A statikus webalkalmazás üzembe helyezése