Azure AI 検索と Azure Cosmos DB for NoSQL を使用してデータを検索する
Azure AI 検索は、サービスとしての検索エンジンを AI 機能との深い統合と組み合わせて、検索インデックスの情報をエンリッチします。
このラボでは、Azure Cosmos DB for NoSQL コンテナー内のデータに自動的にインデックスを付け、そのデータを Azure Cognitive Services Translator 機能を使用してエンリッチする Azure AI 検索インデックスを構築します。
Azure Cosmos DB for NoSQL アカウントを作成する
Azure Cosmos DB は、複数の API をサポートするクラウドベースの NoSQL データベース サービスです。 Azure Cosmos DB アカウントを初めてプロビジョニングするときに、そのアカウントでサポートする API (たとえば、Mongo API や NoSQL API) を選択します。 Azure Cosmos DB for NoSQL アカウントのプロビジョニングが完了したら、エンドポイントとキーを取得し、Azure SDK for .NET または任意の他の SDK を使用して Azure Cosmos DB for NoSQL アカウントに接続する際に使用できます。
-
新しい Web ブラウザー ウィンドウまたはタブで、Azure portal (
portal.azure.com
) に移動します。 -
ご利用のサブスクリプションに関連付けられている Microsoft 資格情報を使用して、ポータルにサインインします。
-
[+ リソースの作成] を選択し、Cosmos DB を検索して、新しい Azure Cosmos DB for NoSQL アカウント リソースを作成します。以下を設定して、残りの設定はすべて既定値のままにします。
設定 Value サブスクリプション ’‘既存の Azure サブスクリプション’’ リソース グループ ’‘既存のリソース グループを選択するか、新しいものを作成します’’ アカウント名 ’‘グローバルに一意の名前を入力します’’ 場所 ’‘使用可能なリージョンを選びます’’ 容量モード サーバーレス 📝 ご利用のラボ環境には、新しいリソース グループを作成できない制限が存在する場合があります。 その場合は、事前に作成されている既存のリソース グループを使用します。
-
デプロイ タスクが完了するまで待ってから、このタスクを続行してください。
-
新しく作成された Azure Cosmos DB アカウント リソースに移動し、 [キー] ペインに移動します。
-
このペインには、SDK からアカウントに接続するために必要な接続の詳細と資格情報が含まれています。 具体的な内容は次のとおりです。
-
[URI] フィールドに注目します。 このエンドポイントの値は、この演習で後ほど使用します。
-
[主キー] フィールドに注目してください。 このキーの値は、この演習で後ほど使用します。
-
[プライマリ接続文字列] フィールドに注目します。 この接続文字列の値は、この演習で後ほど使用します。
-
-
リソース メニューで [データ エクスプローラー] を選択します。
-
[データ エクスプローラー] ペインで、 [新しいコンテナー] を選択します。
-
[新しいコンテナー] ポップアップで、各設定に次の値を入力してから [OK] を選択します。
設定 Value データベース ID 新規作成 | cosmicworks
コンテナー ID products
パーティション キー /categoryId
-
[データ エクスプローラー] ペインに戻り、cosmicworks データベース ノードを展開して、階層内の products コンテナー ノードを確認します。
Azure Cosmos DB for NoSQL アカウントにサンプル データをシードする
cosmicworks データベースと products コンテナーを作成するコマンドライン ユーティリティを使用します。
-
Visual Studio Code で、[ターミナル] メニューを開き、[新しいターミナル] を選択します。
-
[cosmicworks][nuget.org/packages/cosmicworks] コマンドライン ツールをインストールして、マシンにグローバルに使用できるようにします。
dotnet tool install cosmicworks --global --version 1.*
💡 このコマンドが完了するまで数分かかる場合があります。 過去にこのツールの最新バージョンを既にインストールしている場合は、このコマンドによって警告メッセージ (*ツール ‘cosmicworks’ は既にインストールされています) が出力されます。
-
cosmicworks を実行し、次のコマンドライン オプションを使用して Azure Cosmos DB アカウントをシードします。
オプション Value –endpoint ’‘このラボで先ほどコピーしたエンドポイントの値’’ –key ’‘このラボで先ほどコピーしたキーの値’’ –datasets product cosmicworks --endpoint <cosmos-endpoint> --key <cosmos-key> --datasets product
📝 たとえば、エンドポイントが https://dp420.documents.azure.com:443/ で、キーが fDR2ci9QgkdkvERTQ== の場合、コマンドは次のようになります。
cosmicworks --endpoint https://dp420.documents.azure.com:443/ --key fDR2ci9QgkdkvERTQ== --datasets product
-
cosmicworks コマンドによって、データベース、コンテナー、および項目がアカウントに設定されるまで待ちます。
-
統合ターミナルを閉じます。
-
Visual Studio Code を閉じます。
“Azure AI 検索” リソースを作成する
この演習を続行するには、まず新しい Azure AI 検索インスタンスを作成する必要があります。
-
新しい Web ブラウザー ウィンドウまたはタブで、Azure portal (
portal.azure.com
) に移動します。 -
ご利用のサブスクリプションに関連付けられている Microsoft 資格情報を使用して、ポータルにサインインします。
-
[+ リソースの作成] を選択し、AI 検索を検索した後、新しい Azure AI 検索アカウント リソースを、以下の設定で作成します。残りの設定はすべて既定値のままにします。
設定 Value サブスクリプション ’‘既存の Azure サブスクリプション’’ リソース グループ ’‘既存のリソース グループを選択するか、新しいものを作成します’’ 名前 ’‘グローバルに一意の名前を入力します’’ 場所 ’‘使用可能なリージョンを選びます’’ 📝 ご利用のラボ環境には、新しいリソース グループを作成できない制限が存在する場合があります。 その場合は、事前に作成されている既存のリソース グループを使用します。
-
デプロイ タスクが完了するまで待ってから、このタスクを続行してください。
-
新しく作成された Azure AI 検索アカウント リソースに移動します。
Azure Cosmos DB for NoSQL データ用にインデクサーとインデックスを作成する
特定の Azure Cosmos DB for NoSQL コンテナー内のデータのサブセットに 1 時間ごとにインデックスを付けるインデクサーを作成します。
-
[AI 検索] リソース ブレードから、[データのインポート] を選択します。
-
[データのインポート] ウィザードの [データへの接続] の手順で、[データ ソース] リストで [Azure Cosmos DB] を選択します。
-
次の設定でデータ ソースを構成し、残りのすべての設定を既定値のままにします。
設定 Value [データ ソース名] products-cosmossql-source
接続文字列 “先ほど作成した Azure Cosmos DB for NoSQL アカウントの接続文字列” データベース cosmicworks コレクション products -
[クエリ] フィールドに、次の SQL クエリを入力して、コンテナーにあるデータのサブセットの具体化されたビューを作成します。
SELECT p.id, p.categoryId, p.name, p.price, p._ts FROM products p WHERE p._ts > @HighWaterMark ORDER BY p._ts
-
[_ts によって並べ替えられたクエリ結果] チェックボックスを選択します。
📝 このチェックボックスにより、Azure AI 検索に、クエリが [_ts] フィールドで結果をソートすることを知らせることができます。 この種類の並べ替えでは、進行状況の追跡を段階的に実行できます。 結果はタイムスタンプ順に並べられているため、インデクサーは失敗した場合でも、同じ _ts 値からすぐに正しいバックアップを取得することができます。
-
[次へ: コグニティブ スキルの追加] を選択します。
-
[スキップ先: 対象インデックスをカスタマイズします] を選びます。
-
ウィザードの [対象インデックスをカスタマイズします] の手順で、次の設定を使用してインデックスを構成し、残りのすべての設定を既定値のままにします。
設定 Value [インデックス名] products-index
[キー] id -
フィールド テーブルで、次のテーブルを使用したフィールドごとに [取得可能]、[フィルター可能]、[ソート可能]、[ファセット可能]、および [検索可能] オプションをそれぞれ構成します。
フィールド 取得可能 フィルター可能 ソート可能 ファセット可能 検索可能 id ✔ ✔ ✔ categoryId ✔ ✔ ✔ ✔ name ✔ ✔ ✔ ✔ (英語 - Microsoft) Price ✔ ✔ ✔ ✔ -
[次へ: インデクサーの作成] を選択します。
-
ウィザードの [インデクサーの作成] の手順で、次の設定を使用してインデクサーを構成し、残りのすべての設定を既定値のままにします。
設定 Value 名前 products-cosmosdb-indexer
[スケジュール] 1 時間ごと -
[送信] を選択して、データ ソース、インデックス、およびインデクサーを作成します。
📝 最初のインデクサーを作成した後、アンケートのポップアップを閉じる必要がある場合があります。
-
[AI 検索] リソース ブレードから、[インデクサー] タブに移動して、最初のインデックス作成操作の結果を確認します。
-
このタスクを続行する前に、products-cosmosdb-indexer インデクサーの状態が Success になるのを待ちます。
📝 ブレードが自動的に更新されない場合は、[更新] オプションを使用してブレードを更新しなければならない場合があります。
-
[インデックス] タブに移動し、products-indexインデックスを選択します。
検索クエリの例を使用したインデックスの検証
これで、Azure Cosmos DB for NoSQL データの具体化されたビューが検索インデックスに含まれるようになったため、Azure AI 検索の機能を利用するいくつかの基本的なクエリを実行できます。
📝 このラボは、Azure AI 検索の構文を説明するためのものではありません。 これらのクエリは、検索インデックスとエンジンで利用可能な機能の一部を紹介するためにキュレーションされました。
-
[検索エクスプローラー] タブで、[ビュー] プルダウンを選択してから、[JSON ビュー] を選択します。
-
JSON クエリ エディター内の * (ワイルドカード) 演算子を使用して考えられるすべての結果を返す既定の JSON 検索クエリの構文に注目してください。
{ "search": "*" }
-
[検索] ボタンを選択して検索を実行します。
-
この検索クエリで、考えられるすべての結果が返されることに注意してください。
-
JSON クエリ エディターに、次のクエリを入力した後、[検索] を選択します。
{ "search": "touring 3000" }
-
この検索クエリは、touring または 3000 のいずれかの語句を含む結果を返し、両方の語句を含む結果により高いスコアを与えていることに注意してください。 次に、結果は @search.score フィールドの降順で並べ替えられます。
-
JSON クエリ エディターに、次のクエリを入力した後、[検索] を選択します。
{ "search": "red" , "count": true }
-
この検索クエリでは、用語 red の結果を返しますが、すべてが同じページに含まれていない場合でも、結果の総数を示すメタデータ フィールドも含まれていることに注意してください。
-
JSON クエリ エディターに、次のクエリを入力した後、[検索] を選択します。
{ "search": "blue" , "count": true , "top": 6 }
-
この検索クエリでは、サーバー側に一致するものが多い場合でも、一度に返されるのは 6 つの結果セットのみであることに注意してください。
-
JSON クエリ エディターに、次のクエリを入力した後、[検索] を選択します。
{ "search": "mountain" , "count": true , "top": 25 , "skip": 50 }
-
この検索クエリでは最初の 50 件の結果がスキップされ、25 件の結果セットが返されることに注意してください。 これがクライアント側アプリケーションのページ分割されたビューである場合、これが結果の 3 番目の “ページ” になると推測できます。
-
JSON クエリ エディターに、次のクエリを入力した後、[検索] を選択します。
{ "search": "touring" , "count": true , "filter": "price lt 500" }
-
この検索クエリでは、数値価格フィールドの値が 500 未満の場合にのみ結果が返されることに注意してください。
-
JSON クエリ エディターに、次のクエリを入力した後、[検索] を選択します。
{ "search": "road" , "count": true , "top": 15 , "facets": ["price,interval:500"] }
-
この検索クエリでは、結果の現在のページにすべてが存在しない場合でも、各カテゴリに属する項目の数を示すファセット データのコレクションが返されることに注意してください。 この例では、一致する項目が 500 の間隔で数値価格カテゴリに分類されています。 これは通常、クライアント側アプリケーションのフィルターおよびナビゲーション補助を設定するために使用されます。
-
Web ブラウザーのウィンドウまたはタブを閉じます。