2 - .NET を使用して検索インデックスを作成して読み込む

次の手順に従って、引き続き検索が有効な Web サイトを構築します。

  • 検索リソースを作成する
  • 新しいインデックスを作成する
  • サンプル スクリプトと Azure SDK (Azure.Search.Documents) を使用して .NET でデータをインポートします。

Azure AI Search リソースを作成する

Azure CLI または Azure PowerShell を使用して、コマンド ラインから新しい検索リソースを作成します。 インデックスへの読み取りアクセスに使用するクエリ キーを取得し、オブジェクトの追加に使用される組み込みの管理キーを取得します。

デバイスに Azure CLI または Azure PowerShell がインストールされている必要があります。 デバイスのローカル管理者でない場合は、[Azure PowerShell] を選択し、Scope パラメーターを使用して現在のユーザーとして実行します。

注意

このタスクには、Azure CLI と Azure PowerShell 用の Visual Studio Code 拡張機能は必要ありません。 Visual Studio Code では、拡張機能のないコマンド ライン ツールが認識されます。

  1. Visual Studio Code の ターミナル で、新しいターミナル を選択します。

  2. Azure に接続します:

    az login
    
  3. 新しい検索サービスを作成する前に、サブスクリプションの既存のサービスを一覧表示します:

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

    使用するサービスがある場合は、名前を書き留め、次のセクションに進んでください。

  4. 新しい検索サービスを作成します。 次のコマンドレットをテンプレートとして使用し、リソース グループ、サービス名、レベル、リージョン、パーティション、レプリカを有効な値に置き換えます。 次のステートメントでは、前の手順で作成した "cognitive-search-demo-rg" リソース グループを使用し、"free" レベルを指定します。 Azure サブスクリプションに既に無料検索サービスがある場合は、代わりに "basic" などの課金対象レベルを指定します。

    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. 検索サービスへの読み取りアクセスを許可するクエリ キーを取得します。 検索サービスは、2 つの管理キーと 1 つのクエリ キーでプロビジョニングされます。 リソース グループと検索サービスの有効な名前を置き換えます。 後の手順でクライアント コードに貼り付けることができるように、クエリ キーをメモ帳にコピーします。

    az search query-key list --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
    
  6. 検索サービス管理 API キーを取得します。 管理 API キーは、検索サービスへの書き込みアクセスを提供します。 管理キーのいずれかをメモ帳にコピーして、インデックスを作成して読み込む一括インポート手順で使用できるようにします。

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

スクリプトでは、Azure SDK for Azure AI Search を使用します。

  1. Visual Studio Code で、サブディレクトリ search-website-functions-v4/bulk-insert 内の Program.cs ファイルを開き、次の変数を実際の値に置き換えて、Azure Search SDK による認証を行います。

    • YOUR-SEARCH-RESOURCE-NAME
    • YOUR-SEARCH-ADMIN-KEY
    
    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using AzureSearch.BulkInsert;
    using ServiceStack;
    
    const string BOOKS_URL = "https://raw.githubusercontent.com/Azure-Samples/azure-search-sample-data/main/good-books/books.csv";
    const string SEARCH_ENDPOINT = "https://YOUR-SEARCH-RESOURCE-NAME.search.windows.net";
    const string SEARCH_KEY = "YOUR-SEARCH-ADMIN-KEY";
    const string SEARCH_INDEX_NAME = "good-books";
    
    Uri searchEndpointUri = new(SEARCH_ENDPOINT);
    
    SearchClient client = new(
        searchEndpointUri,
        SEARCH_INDEX_NAME,
        new AzureKeyCredential(SEARCH_KEY));
    
    SearchIndexClient clientIndex = new(
        searchEndpointUri,
        new AzureKeyCredential(SEARCH_KEY));
    
    await CreateIndexAsync(clientIndex);
    await BulkInsertAsync(client);
    
    static async Task CreateIndexAsync(SearchIndexClient clientIndex)
    {
        Console.WriteLine("Creating (or updating) search index");
        SearchIndex index = new BookSearchIndex(SEARCH_INDEX_NAME);
        var result = await clientIndex.CreateOrUpdateIndexAsync(index);
    
        Console.WriteLine(result);
    }
    
    static async Task BulkInsertAsync(SearchClient client)
    {
        Console.WriteLine("Download data file");
        using HttpClient httpClient = new();
    
        var csv = await httpClient.GetStringAsync(BOOKS_URL);
    
        Console.WriteLine("Reading and parsing raw CSV data");
        var books =
            csv.ReplaceFirst("book_id", "id").FromCsv<List<BookModel>>();
    
        Console.WriteLine("Uploading bulk book data");
        _ = await client.UploadDocumentsAsync(books);
    
        Console.WriteLine("Finished bulk inserting book data");
    }
    
  2. プロジェクト ディレクトリのサブディレクトリ search-website-functions-v4/bulk-insert のために Visual Studio Code で統合ターミナルを開き、次のコマンドを実行して依存関係をインストールします。

    dotnet restore
    
  1. プロジェクト ディレクトリのサブディレクトリ search-website-functions-v4/bulk-insert に Visual Studio の統合ターミナルを引き続き使用し、次の bash コマンドを実行して Program.cs スクリプトを実行します。

    dotnet run
    
  2. コードを実行すると、コンソールに進行状況が表示されます。

  3. アップロードが完了すると、コンソールに出力される最後のステートメントは "Finished bulk inserting book data (書籍データの一括挿入が完了しました)" になります。

新しい検索インデックスを確認する

アップロードが完了すると、検索インデックスを使用できるようになります。 Azure portal で新しいインデックスを確認します。

  1. Azure portal で、前の手順で作成した検索サービスを見つけます

  2. 左側の [インデックス] を選択し、適切なブックのインデックスを選択します。

    Expandable screenshot of Azure portal showing the index.

  3. 既定では、[検索エクスプローラー] タブにインデックスが開きます。[検索] を選択して、インデックスからドキュメントを返します。

    Expandable screenshot of Azure portal showing search results

一括インポート ファイルの変更をロールバックする

次の git コマンドを Visual Studio Code 統合ターミナルの bulk-insert ディレクトリで使用して、変更をロールバックします。 これらはチュートリアルを続ける上で必要ありません。これらのシークレットをリポジトリに保存したりプッシュしたりしないでください。

git checkout .

Search リソース名をコピーする

Search リソース名をメモします。 これは、Azure 関数アプリを自分の Search リソースに接続するために必要になります。

注意事項

Azure 関数内で自分の Search 管理者キーを使用したくなるかもしれませんが、それでは最小特権の原則に沿っていません。 Azure 関数では、クエリ キーを使用して最小特権に準拠します。

次のステップ

静的 Web アプリをデプロイする