在 Azure AI 搜索中计划索引器

设置 schedule 属性时,可以将索引器配置为按计划运行。 适合配置按计划运行索引器的一些情况包括:

  • 源数据会随着时间的推移而变化,应让索引器自动处理差异。
  • 源数据非常大,你需要一个定期计划来为所有内容编制索引。
  • 使用多个索引器从多个源填充索引,并且你希望让各个作业错开以减少冲突。

如果在典型的 2 小时处理时段内无法完成索引编制,可以将索引器安排为按 2 小时节奏运行,以处理大量数据。 只要你的数据源支持更改检测逻辑,索引器就可以在每次运行时自动从中断的位置继续运行。

索引器列入计划后,它将保留在计划中,直到你清除间隔或开始时间,或将 disabled 设置为 true。 在没有内容要处理时保留索引器的计划不会影响系统性能。 检查更改的内容是一项相对较快的操作。

系统必备

  • 使用数据源和索引配置的有效索引器。

  • 数据源中的更改检测。 Azure 存储和 SharePoint 内置了更改检测功能。 其他数据源(如 Azure SQLAzure Cosmos DB)必须手动启用。

计划定义

计划是索引器定义的一部分。 如果忽略 schedule 属性,则索引器将仅按需运行。 属性包含两个部分。

属性 说明
"interval" (必需)连续两次执行索引器间隔的时间量。 允许的最短时间间隔为 5 分钟,最长为 1440 分钟(24 小时)。 必须将其格式化为 XSD“dayTimeDuration”值(ISO 8601 持续时间值的受限子集)。

它的模式为:P(nD)(T(nH)(nM))

示例:PT15M 为每隔 15 分钟,PT2H 为每隔 2 小时。
"startTime" (可选)以协调世界时 (UTC) 指定开始时间。 如果忽略,则使用当前时间。 此时间可以是过去的时间,在此情况下,计划的第一次执行的运行方式如同索引器在原始开始时间之后连续运行。

以下示例计划从 1 月 1 日午夜开始,每 2 小时运行一次。

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

配置日程安排

计划在索引器定义中指定。 若要设置计划,可以使用 Azure 门户、REST API 或 Azure SDK。

  1. 登录到 Azure 门户,然后打开搜索服务页面。
  2. 在左侧导航窗格中,选择“索引器”。
  3. 打开索引器。
  4. 选择“设置”。
  5. 向下滚动到“计划”,然后选择“每小时”、“每天”或“自定义”以设置特定日期、时间或自定义间隔。

切换到索引顶部的“索引器定义(JSON)”选项卡,以 XSD 格式查看计划定义。

计划行为常见问题解答

是否可以并行运行多个索引器作业?

可同时运行多个索引器,但每个索引器就是单实例。 不能同时运行同一索引器的两个副本。

对于基于文本的索引编制,计划程序可以启动搜索服务支持的尽可能多的索引器作业,这取决于搜索单位的数量。 例如,如果该服务有三个副本和四个分区,那么你可能有 12 个索引器作业处于活动执行状态,无论是按需启动还是按计划启动。

对于基于技能的索引编制,索引器在特定的执行环境中运行。 因此,服务单元的数量与你可以运行的基于技能的索引器作业的数量无关。 多个基于技能的索引器可以并行运行,但这样做会依赖于执行环境中的内容处理器可用性。

计划作业是否始终在指定时间启动?

索引器进程可能会排队,而且可能并不在发布的时间正好启动,具体取决于处理工作工作负荷和其他因素。 例如,如果索引器碰巧在其下一次计划执行设置为开始时仍在运行,则挂起的执行将推迟到下一次计划执行,从而允许当前作业完成。

让我们考虑更具体的示例。 假设我们配置一个索引器计划,其间隔为每小时,开始时间为 2024 年 1 月 1 日上午 8:00:00 (UTC)。 下面是索引器运行时间超过一小时时可能出现的情况:

  1. 第一次索引器执行的开始时间为 2024 年 1 月 1 日上午 8:00 (UTC) 左右。 假设此执行需要 20 分钟(或不到 1 小时的任何时间)。

  2. 第二次执行的开始时间为 2024 年 1 月 1 日上午 9:00 (UTC) 左右。 假设此执行耗时 70 分钟(超过 1 小时),并且在上午 10:10 (UTC) 之前无法完成。

  3. 第三次执行的计划开始时间为上午 10:00 (UTC),但此时上一次执行仍在运行。 那么,将会跳过此计划的执行。 索引器的下一次执行在上午 11:00 (UTC) 之前不会开始。

注意

如果有严格的时效性索引器执行要求,则应考虑使用推送 API 模型,以便可以直接控制索引管道。

如果索引编制在同一文档上重复失败,会发生什么情况?

如果已为索引器设置特定计划,但每次都在同一文档上反复失败,则索引器的运行频率将开始降低(取决于最大时间间隔,至少每 2 小时或 24 小时运行一次,因实现因素而异),直到可以重新成功取得进展。 如果认为基本问题已修复,则可以手动运行索引器,如果索引编制成功,索引器将恢复为其常规计划。

后续步骤

对于按计划运行的索引器,可以通过从搜索服务检索状态来监视操作,也可以通过启用资源日志记录来获取详细信息。