Azure AI Search の検索インデックスにデータを読み込む
この記事では、定義済みの検索インデックスにドキュメントをインポートする方法について説明します。 Azure AI 検索では、検索インデックスが最初に作成された後、2 番目のステップとしてデータのインポートが行われます。 ポータルとインデクサー パイプラインでのインポート ウィザードは例外で、インデックスの作成と読み込みが 1 つのワークフローで行われます。
データのインポートのしくみ
検索サービスでは、インデックス スキーマに準拠する JSON ドキュメントが受け入れられます。 検索サービスでは、JSON のプレーンテキストとベクトルがインポートされてインデックスを作成され、フルテキスト検索、ベクトル検索、ハイブリット検索、ナレッジ マイニングのシナリオで使われます。
プレーンテキストのコンテンツは、外部データ ソースの英数字フィールド、検索シナリオで役に立つメタデータ、またはスキルセット (スキルによって、画像や非構造化コンテンツからテキストの記述を抽出または推論できます) によって作成されたエンリッチ済みコンテンツから取得できます。
ベクトル コンテンツは、適用される AI と統合された Azure AI 検索の機能により、外部埋め込みモデルまたは垂直統合を使ってベクトル化されます。
これらのドキュメントは自分で準備できますが、サポートされているデータ ソースにコンテンツが存在する場合は、インデクサーを実行するかインポート ウィザードを使って、ドキュメントの取得、JSON シリアル化、インデックス作成を自動化できます。
データのインデックスが作成されると、インデックスの物理データ構造がロックされます。 変更できるものとできないもののガイダンスについては、インデックスの更新と再構築に関する記事をご覧ください。
インデックス作成はバックグラウンド プロセスではありません。 検索サービスではインデックス作成とクエリ ワークロードのバランスが取られますが、クエリの待ち時間が長すぎる場合は、容量を追加するか、インデックスを読み込むクエリ アクティビティが少ない期間を特定することができます。
詳しくは、データ インポート戦略に関する記事をご覧ください。
Azure portal を使用する
Azure portal では、インポート ウィザードを使って、シームレスなワークフローでインデックスを作成して読み込みます。 既存のインデックスを読み込む場合は、別の方法を選択します。
Azure アカウントを使って Azure portal にサインインし、使う検索サービスを見つけます。
[概要] ページのコマンド バーで [データのインポート] または [データのインポートとベクター化] を選んで、検索インデックスを作成して設定します。
次のリンクからワークフローを確認できます: 「クイック スタート: Azure AI Search インデックスの作成」と「クイックスタート: 垂直統合」。
ウィザードが完了したら、検索エクスプローラーを使って結果を確認します。
ヒント
インポート ウィザードでは、インデクサーが作成されて実行されます。 インデクサーが既に定義されている場合は、Azure portal からインデクサーをリセットして実行できます。これは、フィールドを段階的に追加する場合に便利です。 リセットにより、インデクサーが強制的に最初からやり直しをし、すべてのソース ドキュメントからすべてのフィールドを取得します。
REST API を使用する
ドキュメント - インデックスは、データを検索インデックスにインポートするための REST API です。 REST API は初期の概念実証テストに役立ち、多くのコードを記述しなくてもインデックス作成ワークフローをテストできます。 @search.action
パラメーターは、特定のフィールドの新しい値または置換値の観点から、ドキュメントの全体が追加されるのか、部分的に追加されるのかを決定します。
クイック スタート: REST を使用したテキスト検索の手順について説明します。 次の例は、例の変更されたバージョンです。 これは簡潔にするためにトリミングされており、既存のドキュメントが上書きされることを防ぐために、最初の HotelId 値が変更されています。
インデックス名、"docs/index" エンドポイント、および
@search.action
パラメーターを含む要求本文を指定する POST 呼び出しを作成します。POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/index?api-version=2024-07-01 Content-Type: application/json api-key: [admin key] { "value": [ { "@search.action": "upload", "HotelId": "1111", "HotelName": "Secret Point Motel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.", "Category": "Boutique", "Tags": [ "pool", "air conditioning", "concierge" ] }, { "@search.action": "mergeOrUpload", "HotelId": "2", "HotelName": "Twin Dome Motel", "Description": "This is description is replacing the original one for this hotel. New and changed values overwrite the previous ones. In a comma-delimited list like Tags, be sure to provide the full list because there is no merging of values within the field itself.", "Category": "Boutique", "Tags": [ "pool", "free wifi", "concierge", "my first new tag", "my second new tag" ] } ] }
ドキュメントを作成または上書きするには、
@search.action
パラメーターをupload
に設定します。 ドキュメント内の特定のフィールドを更新の対象にする場合は、merge
またはuploadOrMerge
に設定します。 前の例では、両方のアクションが示されています。アクション 効果 merge 既に存在するドキュメントを更新し、ドキュメントが見つからない場合は失敗します。 マージは既存の値を置き換えます。 そのため、 Collection(Edm.String)
型のフィールドなど、複数の値を含むコレクション フィールドは必ず確認してください。 たとえば、tags
フィールドの値が["budget"]
で始まり、値["economy", "pool"]
でマージを実行した場合、tags
フィールドの最終値は["economy", "pool"]
になります。["budget", "economy", "pool"]
にはなりません。mergeOrUpload ドキュメントが存在する場合は merge、ドキュメントが新しい場合は upload と同じように動作します。 これは、増分更新の最も一般的なアクションです。 upload "upsert" と同様に、ドキュメントが新しい場合は挿入され、存在する場合は更新または置換されます。 インデックスに必要な値がドキュメントにない場合、ドキュメント フィールドの値は null に設定されます。 要求を送信します。
検証手順として追加したドキュメントを参照します。
GET https://[service name].search.windows.net/indexes/hotel-sample-index/docs/1111?api-version=2024-07-01
ドキュメント キーまたは ID が新しい場合、null がドキュメントで指定されていないすべてのフィールドの値になります。 既存のドキュメントに対するアクションの場合、更新された値が前の値に置き換わります。 "merge" または "mergeUpload" で指定されなかったフィールドは、検索インデックスでそのまま残ります。
Azure SDK を使用する
プログラミング機能は、次の Azure SDK で提供されています。
Azure SDK for .NET では、ドキュメントのインデックスへの簡易および一括アップロード用に、次の API が提供されています。
単純なインデックス作成と大規模なインデックス作成のコンテキストで、インデックス作成を説明するサンプルがいくつかあります。
「インデックスを読み込む」では、基本的な手順について説明しています。
Azure SDK チームからの「Azure.Search.Documents サンプル - ドキュメントのインデックス作成」では、SearchIndexingBufferedSender を追加しています。
任意のデータのインデックス作成に関するチュートリアルでは、バッチ インデックス作成と、最適なサイズを特定するためのテスト戦略を結合しています。
ベクトル フィールドのインデックス作成方法がわかるコードの例については、azure-search-vector-samples リポジトリを確認してください。