Azure Database for MySQL フレキシブル サーバーからのデータのインデックス作成 (プレビュー)

メモ

Azure AI 検索は、Azure ポータルREST APIおよびAzure SDKから使用できます。 また、Foundry IQ は、エンタープライズ コンテンツを、Microsoft Foundry ポータルのエージェントの再利用可能なアクセス許可に対応したナレッジ ベースに変換するマネージド ナレッジ レイヤーです。

メモ

この機能は現在プレビュー段階です。 このプレビュー版はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能がサポートされていないか、機能が制限されている可能性があります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。

重要

これらの機能は、他のMicrosoft サービスおよびサード パーティのサービスへの接続をサポートします。 これらのサービスの利用は各サービスの利用規約に従うものとし、データが Azure コンプライアンス境界の外部で処理または保存されたり、Azure コンプライアンス境界内に流入したりする場合があります。

データが組織のコンプライアンスと地理的境界の外部に流れるかどうか、および関連する影響、および適切なアクセス許可、境界、承認がプロビジョニングされるかどうかを管理するのは、お客様の責任です。

特定のユース ケースのコンテキストで構築したアプリケーションを慎重に確認およびテストし、すべての適切な決定とカスタマイズを行う責任があります。 これには、メタプロンプト、コンテンツ フィルター、その他の安全システムなどの独自の責任ある AI 軽減策の実装や、アプリケーションが適切な品質、信頼性、セキュリティ、信頼性の標準を満たしていることを確認する機能が含まれます。 詳細については、「Azure AI 検索透過性に関するメモを参照してください。

この記事では、Azure Database for MySQLからコンテンツをインポートし、Azure AI 検索で検索できるようにする indexer を構成する方法について説明します。 インデクサーへの入力は、1 つのテーブルまたはビューからの行です。 出力は、個々のフィールドで検索可能なコンテンツを含む検索インデックスです。

この記事は、Azure Database for MySQL フレキシブル サーバーからインデックスを作成する情報で「インデクサーを作成する」を補足するものです。 REST API を使用して、すべてのインデクサーに共通する 3 部構成のワークフローを示します。データ ソースの作成、インデックスの作成、インデクサーの作成です。 データ抽出は、インデクサーの作成要求を送信するときに発生します。

高ウォーター マークと論理的な削除を含めるように構成すると、インデクサーは MySQL データベースのすべての変更、アップロード、および削除を実行します。 これらの変更が検索インデックスに反映されます。 データ抽出は、インデクサーの作成要求を送信するときに発生します。

前提 条件

  • プレビューに登録して、 シナリオに関するフィードバックを提供します。 フォームの送信後、この機能に自動的にアクセスできます。

  • Azure Database for MySQLフレキシブル サーバーのサンプル データ。 データはテーブルまたはビューに存在する必要があります。 主キーが必要です。 ビューを使用している場合は、最大水位マーク列が必要です。

  • 読み取りアクセス許可。 フル アクセス 接続文字列にはコンテンツへのアクセスを許可するキーが含まれていますが、Azure ロールを使用している場合は、search service マネージド ID に MySQL に対する Reader アクセス許可があることを確認します。

  • データ ソース、インデックス、インデクサーを作成する REST クライアント

    .NETにはAzure SDKを使用することもできます。 Azure ポータルを使用してインデクサーを作成することはできませんが、インデクサーとデータ ソースは作成後に管理できます。

プレビューの制限事項

現在、日付またはタイムスタンプがすべての行で統一されている場合、変更の追跡と削除の検出は機能しません。 この制限は、プレビューの更新で対処される既知の問題です。 この問題に対処するまで、MySQL インデクサーにスキルセットを追加しないでください。

プレビューでは、ジオメトリの種類と BLOB はサポートされていません。

既に説明したように、インデクサーの作成に対するポータルのサポートはありませんが、MySQL インデクサーとデータ ソースは、Azure ポータルで管理できます。 たとえば、定義を編集したり、インデクサーをリセット、実行、スケジュールしたりできます。

データ ソースを定義する

データ ソース定義では、データの変更を識別するためのインデックス、資格情報、およびポリシーのデータを指定します。 データ ソースは、複数のインデクサーで使用できるように、独立したリソースとして定義されます。

データ ソースの作成または更新 で定義を指定します。 データ ソースを作成するときは、必ずプレビュー REST API を使用してください。

{   
    "name" : "hotel-mysql-ds",
    "description" : "[Description of MySQL data source]",
    "type" : "mysql",
    "credentials" : { 
        "connectionString" : 
            "Server=[MySQLServerName].MySQL.database.azure.com; Port=3306; Database=[DatabaseName]; Uid=[UserName]; Pwd=[Password]; SslMode=Preferred;" 
    },
    "container" : { 
        "name" : "[TableName]" 
    },
    "dataChangeDetectionPolicy" : { 
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "[HighWaterMarkColumn]"
    }
}

重要なポイント:

  • type"mysql" (必須) に設定します。

  • credentials を ADO.NET 接続文字列 に設定します。 Azureポータルの接続文字列ページで、接続文字列を見つけることができます。

  • containerテーブルの名前を設定します。

  • データが揮発性であり、インデクサーが後続の実行時に新しい項目と更新された項目のみを取得する場合は、 dataChangeDetectionPolicy を設定します。

  • ソース アイテムが削除されたときに検索インデックスから検索ドキュメントを削除する場合は、 dataDeletionDetectionPolicy を設定します。

メモ

コンテナー名プロパティの場合、値は文字、数字、アンダースコア (_)、ドット (.)、単一ダッシュ (-)、角かっこ ([]) のみを許可するように制限されます。

インデックスを作成する

インデックスの作成または更新 では、インデックス スキーマを指定します。

{
    "name" : "hotels-mysql-ix",
    "fields": [
        { "name": "ID", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false },
        { "name": "Category", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true  },
        { "name": "City", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true },
        { "name": "Description", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false  }     
    ]
}

ソース テーブルの主キーがドキュメント キー (この場合は "ID") と一致する場合、インデクサーは主キーをドキュメント キーとしてインポートします。

データ型のマッピング

次の表は、MySQL データベースをAzure AI 検索の同等部分にマッピングします。 詳細については、「サポートされているデータ型 (Azure AI 検索)」を参照してください。

メモ

プレビューでは、ジオメトリの種類と BLOB はサポートされていません。

MySQL データ型 Azure AI 検索フィールドの種類
boolboolean Edm.Boolean、Edm.String
tinyintsmallintmediumintintintegeryear Edm.Int32、Edm.Int64、Edm.String
bigint Edm.Int64、Edm.String
floatdoublereal Edm.Double、Edm.String
datedatetimetimestamp Edm.DateTimeOffset、Edm.String
charvarchartinytextmediumtexttextlongtextenumsettime Edm.String
符号なし数値データ、シリアル、10 進数、dec、ビット、BLOB、バイナリ、ジオメトリ N/a

MySQL インデクサーを構成して実行する

インデックスとデータ ソースが作成されたら、インデクサーを作成する準備ができました。 インデクサーの構成では、実行時の動作を制御する入力、パラメーター、およびプロパティを指定します。

インデクサーを作成または更新するには、インデクサー に名前を付け、データ ソースとターゲット インデックスを参照します。

{
    "name" : "hotels-mysql-idxr",
    "dataSourceName" : "hotels-mysql-ds",
    "targetIndexName" : "hotels-mysql-ix",
    "disabled": null,
    "schedule": null,
    "parameters": {
        "batchSize": null,
        "maxFailedItems": null,
        "maxFailedItemsPerBatch": null,
        "base64EncodeKeys": null,
        "configuration": { }
        },
    "fieldMappings" : [ ],
    "encryptionKey": null
}

重要なポイント:

  • フィールド 名または型に違いがある場合、または検索インデックスに複数のバージョンのソース フィールドが必要な場合は、フィールド マッピングを指定します。

  • インデクサーは、作成時に自動的に実行されます。 disabledtrue に設定すると、実行されないようにすることができます。 インデクサーの実行を制御するには、 必要に応じてインデクサーを実行 するか、 スケジュールに従います

インデクサーの状態を確認する

インデクサーの実行を監視するためのインデクサー状態の取得要求を送信します。

GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2026-05-01-preview
  Content-Type: application/json  
  api-key: [admin key]

応答には、状態と処理された項目の数が含まれます。 次の例のようになります。

{
    "status":"running",
    "lastResult": {
        "status":"success",
        "errorMessage":null,
        "startTime":"2024-02-21T00:23:24.957Z",
        "endTime":"2024-02-21T00:36:47.752Z",
        "errors":[],
        "itemsProcessed":1599501,
        "itemsFailed":0,
        "initialTrackingState":null,
        "finalTrackingState":null
    },
    "executionHistory":
    [
        {
            "status":"success",
            "errorMessage":null,
            "startTime":"2024-02-21T00:23:24.957Z",
            "endTime":"2024-02-21T00:36:47.752Z",
            "errors":[],
            "itemsProcessed":1599501,
            "itemsFailed":0,
            "initialTrackingState":null,
            "finalTrackingState":null
        },
        ... earlier history items
    ]
}

実行履歴には、最後に完了した実行のうち最大 50 個が含まれています。これは、最新の実行が最初になるように、時系列の逆順に並べ替えられます。

新しい行と変更された行のインデックス作成

インデクサーで検索インデックスが完全に設定されたら、後続のインデクサーの実行で、データベース内の新しい行と変更された行だけを増分インデックス付けすることができます。

増分インデックス作成を有効にするには、データ ソース定義で dataChangeDetectionPolicy プロパティを設定します。 このプロパティは、データで使用される変更追跡メカニズムをインデクサーに通知します。

Azure Database for MySQL インデクサーの場合、サポートされているポリシーは HighWaterMarkChangeDetectionPolicy のみです。

インデクサーの変更検出ポリシーは、行のバージョンや行が最後に更新された日時を記録する高ウォーターマーク列に依存します。 多くの場合、これは高基準値列の要件を満たすために十分な細分性がある DATEDATETIME、または TIMESTAMP 列です。

MySQL データベースでは、高水準マーク列が次の要件を満たしている必要があります。

  • すべてのデータ挿入では、列の値を指定する必要があります。
  • 項目に対するすべての更新によって、列の値も変更されます。
  • この列の値は、挿入または更新のたびに増加します。
  • 次の WHERE 句と ORDER BY 句を含むクエリを効率的に実行できます。 WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]

次の例は、変更検出ポリシーを含む データ ソース定義 を示しています。

{
    "name" : "[Data source name]",
    "type" : "mysql",
    "credentials" : { "connectionString" : "[connection string]" },
    "container" : { "name" : "[table or view name]" },
    "dataChangeDetectionPolicy" : {
        "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName" : "[last_updated column name]"
    }
}

重要

ビューを使用している場合は、インデクサー データ ソースで高基準値ポリシーを設定する必要があります。

ソース テーブルに高基準値列のインデックスがない場合、MySQL インデクサーによって使用されるクエリがタイムアウトになる可能性があります。特に、 ORDER BY [High Water Mark Column] 句では、テーブルに多数の行が含まれている場合に、インデックスを効率的に実行する必要があります。

削除された行のインデックス作成

テーブルまたはビューから行を削除する場合は、通常、それらの行も検索インデックスから削除する必要があります。 ただし、行がテーブルから物理的に削除された場合、インデクサーは、存在しなくなったレコードの存在を推測する方法はありません。 ソリューションは、 論理的な削除 手法を使用して、テーブルから行を削除せずに論理的に削除することです。 テーブルまたはビューに列を追加し、その列を使用して行を削除済みとしてマークします。

削除状態を提供する列を指定すると、削除状態が trueに設定されている検索ドキュメントを削除するようにインデクサーを構成できます。 この動作をサポートする構成プロパティは、次のようにデータ ソース定義 で指定されるデータ削除検出ポリシーです。

{
    …,
    "dataDeletionDetectionPolicy" : {
        "@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
        "softDeleteColumnName" : "[a column name]",
        "softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
    }
}

softDeleteMarkerValueは文字列である必要があります。 たとえば、削除された行が値 1 でマークされている整数列がある場合は、 "1"を使用します。 削除された行が BIT 列でブール型の true 値でマークされている場合は、文字列リテラル True または true を使用します (大文字/小文字は区別されません)。

次の手順

インデクサーを実行したり、状態を監視したり、インデクサーの実行をスケジュールしたりできます。 次の記事は、Azure MySQL からコンテンツをプルするインデクサーに適用されます。