Azure AI Search でインデクサーのスケジュールを設定する

インデクサーは、 schedule プロパティを設定するときにスケジュールに従って実行するように構成できます。 インデクサーのスケジュール設定が役立つ状況には、次のものがあります。

  • ソース データは時間の経過と共に変化するため、インデクサーによって差分を自動的に処理したい。
  • ソース データは非常に大きく、すべてのコンテンツのインデックスを作成するには定期的なスケジュールが必要です。
  • 複数のインデクサーを使用して複数のソースからインデックスを設定し、競合が減るようにジョブを調整したい。

一般的な 2 時間の処理ウィンドウ内でインデックス作成を完了できない場合は、大量のデータを処理するために 2 時間間隔で実行するようにインデクサーをスケジュールできます。 データ ソースが変更検出ロジックをサポートしている限り、インデクサーは実行のたびに中断したところから自動的に再開できます。

インデクサーがスケジュールに従うと、間隔または開始時刻をクリアするか、disabled を true に設定するまでスケジュールに残ります。 処理するものがない場合にインデクサーをスケジュールに残しても、システムのパフォーマンスには影響しません。 変更されたコンテンツのチェックは、比較的高速な操作です。

前提条件

  • データ ソースとインデックスを使用して構成された有効なインデクサー。

  • データ ソースでの変更の検出。 Azure Storage と SharePoint には変更の検出が組み込まれています。 Azure SQLAzure Cosmos DB などの他のデータ ソースは手動で有効にする必要があります。

スケジュール定義

スケジュールは、インデクサーの定義の一部です。 schedule プロパティを省略した場合、インデクサーは要求されたときにだけ実行します。 プロパティには 2 つの部分があります。

プロパティ 説明
"interval" (必須) 連続する 2 つのインデクサー実行の開始の時間間隔。 設定できる最小の間隔は 5 分、最長は 1440 分 (24 時間) です。 XSD "dayTimeDuration" 値 (ISO 8601 期間値の制限されたサブセット) として書式設定する必要があります。

これのパターンは次のとおりです: P(nD)(T(nH)(nM))

たとえば、15 分ごとの場合は PT15M、2 時間ごとの場合は PT2H です。
"startTime" (省略可能) 開始時刻は世界協定時刻 (UTC) で指定します。 省略すると、現在の時刻が使用されます。 この時刻は過去でもかまいません。その場合、最初の実行はインデクサーが元の開始時刻から継続的に実行されているかのようにスケジュールされます。

次に示すのは、1 月 1 日の午前 0 時に開始され、2 時間ごとに実行されるスケジュールの例です。

{
    "dataSourceName" : "hotels-ds",
    "targetIndexName" : "hotels-idx",
    "schedule" : { "interval" : "PT2H", "startTime" : "2024-01-01T00:00:00Z" }
}

スケジュールを構成する

スケジュールは、インデクサー定義で指定されます。 スケジュールを設定するには、Azure portal、REST API、または Azure SDK を使用できます。

  1. Azure portal にサインインし、検索サービス ページを開きます。
  2. 左側のナビゲーション ウィンドウで、[インデクサー] を選択します。
  3. インデクサーを開きます。
  4. 設定を選択します。
  5. [スケジュール] まで 下にスクロールし、[時間単位]、[日単位]、[カスタム] のいずれかを選択して、特定の日付、時刻、またはカスタム間隔を設定します。

インデックスの上部にある [インデクサー定義 (JSON)] タブに切り替えて、XSD 形式でスケジュール定義を表示します。

スケジュールの動作に関する FAQ

複数のインデクサー ジョブを並列に実行できますか?

複数のインデクサーを同時に実行できますが、各インデクサーは単一のインスタンスです。 同じインデクサーの 2 つのコピーを同時に実行することはできません。

テキストベースのインデックス作成の場合、スケジューラは検索サービスでサポートされている数のインデクサー ジョブを開始できます。これは、検索ユニットの数によって決まります。 たとえば、サービスに 3 つのレプリカと 4 つのパーティションがある場合、オンデマンドまたはスケジュールのどちらで開始されるかにかかわらず、アクティブな実行で 12 個のインデクサー ジョブを使用できます。

スキルベースのインデックス作成の場合、インデクサーは特定の実行環境で実行されます。 このため、サービス ユニットの数は、実行できるスキルベースのインデクサー ジョブの数とは関係ありません。 複数のスキルベースのインデクサーを並列に実行できますが、実行環境内のコンテンツ プロセッサの可用性に依存します。

スケジュールされたジョブは、指定した時刻に常に開始されますか?

インデクサー プロセスはキューに入れられる可能性があり、処理ワークロードや他の要因によっては、ポストされた正確な時刻に開始されない場合があります。 たとえば、スケジュールされた実行の次の開始時刻になってもインデクサーがまだ実行されている場合、現在のジョブが完了できるように、保留中の実行は次のスケジュールされた実行まで延期されます。

さらに具体的な例を示します。 [間隔] を 1 時間、[開始時刻] を 2024 年 1 月 1 日午前 8 時 0 分 0 秒 (UTC) にしてインデクサーのスケジュールを構成するとします。 インデクサーの実行に 1 時間より長くかかると、次のことが起きる可能性があります。

  1. 最初のインデクサーの実行は、2024 年 1 月 1 日午前 8 時 (UTC) 前後に開始します。 この実行には 20 分 (または 1 時間未満の任意の時間) かかるとします。

  2. 2 番目の実行は、2024 年 1 月 1 日午前 9 時 (UTC) 前後に開始します。 この実行に 70 分 (1 時間より長く) かかり、午前 10 時 10 分 (UTC) まで完了しないとします。

  3. 3 回目の実行は午前 10 時 (UTC) に開始するようにスケジュール設定されていますが、その時点で前の実行がまだ終わっていません。 このとき、このスケジュール設定された実行はスキップされます。 インデクサーの次の実行は午前 11 時 (UTC) まで開始しません。

Note

時間の影響を受けやすいインデクサーを厳密に実行する必要がある場合は、インデックス作成パイプラインを直接制御できるように、プッシュ API モデルの使用を検討する必要があります。

同じドキュメントでインデックス作成が繰り返し失敗した場合はどうなりますか?

インデクサーが特定のスケジュールに設定されているが、毎回同じドキュメントで繰り返し失敗する場合、インデクサーは、正常に再び進行するまで、少なくとも 2 時間ごとまたは 24 時間ごとに最大間隔で実行を開始します。 基になっている問題を修正したと思われる場合は、手動でインデクサーを実行でき、インデックス作成が成功すると、インデクサーは通常のスケジュールに戻ります。

次のステップ

スケジュールに基づいて実行されるインデクサーの場合は、検索サービスから状態を取得することによって操作を監視するか、リソース ログを有効にすることによって詳細情報を取得できます。