Azure Cognitive Search のインデクサーをスケジュールする方法How to schedule indexers in Azure Cognitive Search

インデクサーは通常、その作成直後に 1 回実行されます。An indexer normally runs once, immediately after it is created. 必要に応じて、ポータル、REST API、または .NET SDK を使用してもう一度実行できます。You can run it again on demand using the portal, the REST API, or the .NET SDK. スケジュールに従って定期的に実行するようにインデクサーを構成することもできます。You can also configure an indexer to run periodically on a schedule.

インデクサーのスケジュール設定が役立つ状況には、次のものがあります。Some situations where indexer scheduling is useful:

  • ソース データは時間の経過と共に変化し、変更されたデータを Azure Cognitive Search インデクサーによって自動的に処理したいとします。Source data will change over time, and you want the Azure Cognitive Search indexers to automatically process the changed data.
  • 複数のデータ ソースからインデックスが取得され、競合を減らすために、必ず異なるタイミングでインデクサーが実行されるようにしたい。The index will be populated from multiple data sources and you want to make sure the indexers run at different times to reduce conflicts.
  • ソース データが非常に大きく、時間の経過と共にインデクサーの処理を拡大したい。The source data is very large and you want to spread the indexer processing over time. 大量のデータのインデックス作成の詳細については、Azure Cognitive Search で大容量のデータ セットのインデックスを作成する方法に関する記事を参照してください。For more information about indexing large volumes of data, see How to index large data sets in Azure Cognitive Search.

スケジューラは Azure Cognitive Search の組み込みの機能です。The scheduler is a built-in feature of Azure Cognitive Search. 外部のスケジューラを使用して検索インデクサーを制御することはできません。You can't use an external scheduler to control search indexers.

スケジュールのプロパティを定義するDefine schedule properties

インデクサーのスケジュールには、2 つのプロパティがあります。An indexer schedule has two properties:

  • [Interval] (間隔) : スケジュールが設定されたインデクサーの実行間隔を定義します。Interval, which defines the amount of time in between scheduled indexer executions. 設定できる最短の間隔は 5 分、最長は 24 時間です。The smallest interval allowed is 5 minutes, and the largest is 24 hours.
  • [Start Time (UTC)] (開始時刻 (UTC)) : インデクサーを実行する最初の時刻を示します。Start Time (UTC), which indicates the first time at which the indexer should be run.

最初にインデクサーを作成するときに、または後でインデクサーのプロパティを更新することによってスケジュールを指定できます。You can specify a schedule when first creating the indexer, or by updating the indexer's properties later. インデクサーのスケジュールは、ポータルREST API、または .NET SDK を使用して設定できます。Indexer schedules can be set using the portal, the REST API, or the .NET SDK.

特定のインデクサーを実行できるのは一度に 1 つだけです。Only one execution of an indexer can run at a time. インデクサーの次の開始予定時間にそのインデクサーが既に実行されている場合、その実行は、次回予定されている時間まで延期されます。If an indexer is already running when its next execution is scheduled, that execution is postponed until the next scheduled time.

さらに具体的な例を示します。Let’s consider an example to make this more concrete. [Interval] (間隔) を 1 時間、 [Start Time] (開始時刻) を 2019 年 6 月 1 日午前 8 時 0 分 0 秒 (UTC) にしてインデクサーのスケジュールを構成するとします。Suppose we configure an indexer schedule with an Interval of hourly and a Start Time of June 1, 2019 at 8:00:00 AM UTC. インデクサーの実行に 1 時間より長くかかると、次のことが起きる可能性があります。Here’s what could happen when an indexer run takes longer than an hour:

  • 最初のインデクサーの実行は、2019 年 6 月 1 日午前 8 時 (UTC) 前後に開始します。The first indexer execution starts at or around June 1, 2019 at 8:00 AM UTC. この実行に 20 分 (または、1 時間未満) かかるものとします。Assume this execution takes 20 minutes (or any time less than 1 hour).
  • 2 番目の実行は、2019 年 6 月 1 日午前 9 時 (UTC) 前後に開始します。The second execution starts at or around June 1, 2019 9:00 AM UTC. この実行に 70 分 (1 時間より長く) かかり、午前 10 時 10 分 (UTC) まで完了しないとします。Suppose that this execution takes 70 minutes - more than an hour – and it will not complete until 10:10 AM UTC.
  • 3 回目の実行は午前 10 時 (UTC) に開始するようにスケジュール設定されていますが、その時点で前の実行がまだ終わっていません。The third execution is scheduled to start at 10:00 AM UTC, but at that time the previous execution is still running. このとき、このスケジュール設定された実行はスキップされます。This scheduled execution is then skipped. インデクサーの次の実行は午前 11 時 (UTC) まで開始しません。The next execution of the indexer will not start until 11:00 AM UTC.


インデクサーが特定のスケジュールに設定されているが実行のたびに同じドキュメントに対して繰り返し失敗する場合、進捗が再び正常化するまでの間、インデクサーは (最大で 24 時間に 1 回に) 間隔を開けて実行頻度を下げます。If an indexer is set to a certain schedule but repeatedly fails on the same document over and over again each time it runs, the indexer will begin running on a less frequent interval (up to the maximum of at least once every 24 hours) until it successfully makes progress again. インデクサーが特定の箇所で停止する原因になっていた問題をすべて修正したと思われる場合、インデクサーをオンデマンドで実行できます。それによって進捗が正常になったら、インデクサーは設定されていたスケジュール間隔に復帰します。If you believe you have fixed whatever the issue that was causing the indexer to be stuck at a certain point, you can perform an on demand run of the indexer, and if that successfully makes progress, the indexer will return to its set schedule interval again.

ポータルでスケジュールを設定するSchedule in the portal

ポータルでデータ インポート ウィザードを使用して、インデクサーのスケジュールを作成時に定義できます。The Import Data wizard in the portal lets you define the schedule for an indexer at creation time. 既定のスケジュール設定は [Hourly] (毎時間) で、この場合、インデクサーは作成後に 1 回実行され、その後は 1 時間ごとに再実行されます。The default Schedule setting is Hourly, which means the indexer runs once after it is created, and runs again every hour afterwards.

インデクサーを自動的に再実行したくない場合、スケジュール設定を [Once] (1 回) に変更できます。または、1 日に 1 回実行する場合は [Daily] (毎日) に変更できます。You can change the Schedule setting to Once if you don't want the indexer to run again automatically, or to Daily to run once per day. 異なる間隔または将来の特定の開始時刻を指定したい場合、 [カスタム] に設定します。Set it to Custom if you want to specify a different interval or a specific future Start Time.

スケジュールを [カスタム] に設定すると、 [Interval] (間隔)[Start Time (UTC)] (開始時刻 (UTC)) を指定するフィールドが表示されます。When you set the schedule to Custom, fields appear to let you specify the Interval and the Start Time (UTC). 設定できる最短の間隔は 5 分、最長は 1440 分 (24 時間) です。The shortest time interval allowed is 5 minutes, and the longest is 1440 minutes (24 hours).

データ インポート ウィザードでインデクサー スケジュールを設定するSetting indexer schedule in Import Data wizard

インデクサーが作成されたら、インデクサーの編集パネルを使用してスケジュール設定を変更できます。After an indexer has been created, you can change the schedule settings using the indexer's Edit panel. スケジュールのフィールドはデータ インポート ウィザードと同じです。The Schedule fields are the same as in the Import Data wizard.

インデクサーの編集パネルでスケジュールを設定するSetting the schedule in indexer Edit panel

REST API を使用してスケジュールを設定するSchedule using REST APIs

REST API を使用してインデクサーのスケジュールを定義できます。You can define the schedule for an indexer using the REST API. そのためには、インデクサーを作成または更新するときに、schedule プロパティを含めます。To do this, include the schedule property when creating or updating the indexer. 次の例では、既存のインデクサーを更新する PUT 要求を示します。The example below shows a PUT request to update an existing indexer:

Content-Type: application/json
api-key: admin-key

    "dataSourceName" : "myazuresqldatasource",
    "targetIndexName" : "target index name",
    "schedule" : { "interval" : "PT10M", "startTime" : "2015-01-01T00:00:00Z" }

interval パラメーターは必須です。The interval parameter is required. interval は、連続する 2 つのインデクサー実行の開始の時間間隔を示します。The interval refers to the time between the start of two consecutive indexer executions. 許可される最短の間隔は 5 分です。最長は 1 日です。The smallest allowed interval is 5 minutes; the longest is one day. XSD "dayTimeDuration" 値 (ISO 8601 期間値の制限されたサブセット) として書式設定する必要があります。It must be formatted as an XSD "dayTimeDuration" value (a restricted subset of an ISO 8601 duration value). 使用されるパターンは、P(nD)(T(nH)(nM)) です。The pattern for this is: P(nD)(T(nH)(nM)). たとえば、15 分ごとの場合は PT15M、2 時間ごとの場合は PT2H です。Examples: PT15M for every 15 minutes, PT2H for every 2 hours.

省略可能な startTime は、スケジュールされた実行が開始する時刻を示します。The optional startTime indicates when scheduled executions should begin. 省略すると、現在の UTC 時刻が使用されます。If it is omitted, the current UTC time is used. この時刻は過去でもかまいません。その場合、最初の実行はインデクサーが元の startTime から継続的に実行されているかのようにスケジュールされます。This time can be in the past, in which case the first execution is scheduled as if the indexer has been running continuously since the original startTime.

[インデクサーを実行] 呼び出しを使用して、いつでも必要に応じてインデクサーを実行することもできます。You can also run an indexer on demand at any time using the Run Indexer call. インデクサーの実行とインデクサーのスケジュール設定の詳細については、インデクサーの実行インデクサーの取得インデクサーの更新に関する REST API リファレンスの項目を参照してください。For more information about running indexers and setting indexer schedules, see Run Indexer, Get Indexer, and Update Indexer in the REST API Reference.

.NET SDK を使用してスケジュールを設定するSchedule using the .NET SDK

Azure Cognitive Search .NET SDK を使用してインデクサーのスケジュールを定義できます。You can define the schedule for an indexer using the Azure Cognitive Search .NET SDK. そのためには、インデクサーを作成または更新するときに、schedule プロパティを含めます。To do this, include the schedule property when creating or updating an Indexer.

次の C# の例では、定義済みのデータ ソースとインデックスを使用してインデクサーを作成し、初回は今から 30 分後、その後は毎日 1 回実行するようにスケジュールを設定します。The following C# example creates an indexer, using a predefined data source and index, and sets its schedule to run once every day starting 30 minutes from now:

    Indexer indexer = new Indexer(
        name: "azure-sql-indexer",
        dataSourceName: dataSource.Name,
        targetIndexName: index.Name,
        schedule: new IndexingSchedule(
                        new DateTimeOffset(DateTime.UtcNow.AddMinutes(30))
    await searchService.Indexers.CreateOrUpdateAsync(indexer);

schedule パラメーターを省略した場合、インデクサーは作成直後に 1 回だけ実行されます。If the schedule parameter is omitted, the indexer will only run once immediately after it is created.

startTime パラメーターは過去の時間に設定できます。The startTime parameter can be set to a time in the past. その場合、最初の実行は、指定された startTime から継続的にインデクサーが実行されているかのようにスケジュールされます。In that case, the first execution is scheduled as if the indexer has been running continuously since the given startTime.

スケジュールは IndexingSchedule クラスを使用して定義されます。The schedule is defined using the IndexingSchedule class. IndexingSchedule コンストラクターでは、TimeSpan オブジェクトを使用して interval パラメーターを指定する必要があります。The IndexingSchedule constructor requires an interval parameter specified using a TimeSpan object. 設定できる最短の間隔値は 5 分、最長は 24 時間です。The smallest interval value allowed is 5 minutes, and the largest is 24 hours. DateTimeOffset オブジェクトとして指定された 2 番目の startTime パラメーターは省略可能です。The second startTime parameter, specified as a DateTimeOffset object, is optional.

.NET SDK では、SearchServiceClient クラスとその Indexers プロパティを使用してインデクサーの操作を制御できます。これは、IIndexersOperations インターフェイスのメソッドを実装します。The .NET SDK lets you control indexer operations using the SearchServiceClient class and its Indexers property, which implements methods from the IIndexersOperations interface.

RunRunAsync、または RunWithHttpMessagesAsync メソッドのいずれかを使用して、いつでも必要に応じてインデクサーを実行できます。You can run an indexer on demand at any time using one of the Run, RunAsync, or RunWithHttpMessagesAsync methods.

インデクサーの作成、更新、および実行の詳細については、IIindexersOperations を参照してください。For more information about creating, updating, and running indexers, see IIindexersOperations.