你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在适用于 FHIR 的 Azure API 中运行重编索引作业

重要

Azure API for FHIR 将于 2026 年 9 月 30 日停用。 按照迁移策略在该日期之前转换到 Azure Health Data Services FHIR® 服务。 由于 Azure API for FHIR 停用,在 2025 年 4 月 1 日开始前不会允许新的部署。 Azure Health Data Services FHIR 服务是 Azure API for FHIR 的演化版本,可让客户管理 FHIR、DICOM 和医疗技术服务,并集成到其他 Azure 服务。

在某些情况下,你可能在尚未编制索引的 Azure API for FHIR® 中搜索或排序参数。 在定义自己的搜索参数时,这一点很重要。 在为搜索参数编制索引之前,它不能用于搜索。 本文介绍如何运行重新编制索引作业以在 FHIR 服务数据库中为搜索参数编制索引。

警告

在开始之前请务必阅读整篇文章。 重编索引作业可能会非常耗用性能。 本文包含用于限制和控制重编索引作业的选项。

如何运行重新索引作业

可以针对整个 FHIR 服务数据库和特定的自定义搜索参数执行重新编制索引作业。

对整个 FHIR 服务数据库运行重新编制索引作业

若要运行重新编制索引作业,请在请求正文中将以下 POST 调用与 JSON 格式 Parameters 的资源配合使用。

POST {{FHIR URL}}/$reindex 

{ 

“resourceType”: “Parameters”,  

“parameter”: [] 

}

如果不需要调整分配给重新编制索引作业的资源,请将 "parameter": [] 字段留空(如下所示)。

如果请求成功,则除了响应中的资源外,还会收到 201 创建 状态代码 Parameters ,如以下示例所示。

HTTP/1.1 201 Created 
Content-Location: https://{{FHIR URL}}/_operations/reindex/560c7c61-2c70-4c54-b86d-c53a9d29495e 

{
  "resourceType": "Parameters",
  "id": "560c7c61-2c70-4c54-b86d-c53a9d29495e",
  "meta": {
    "versionId": "\"4c0049cd-0000-0100-0000-607dc5a90000\""
  },
  "parameter": [
    {
      "name": "id",
      "valueString": "560c7c61-2c70-4c54-b86d-c53a9d29495e"
    },
    {
       "name": "lastModified",
       "valueDateTime": "2023-06-08T04:52:44.0974408+00:00"
    },
    {
       "name": "queuedTime",
       "valueDateTime": "2023-06-08T04:52:44.0974406+00:00"
    },
    {
       "name": "totalResourcesToReindex",
       "valueDecimal": 0.0
    },
    {
       "name": "resourcesSuccessfullyReindexed",
       "valueDecimal": 0.0
    },
    {
       "name": "progress",
       "valueDecimal": 0.0
    },
    {
       "name": "status",
       "valueString": "Queued"
    },
    {
       "name": "maximumConcurrency",
       "valueDecimal": 3.0
    },
    {
        "name": "queryDelayIntervalInMilliseconds",
        "valueDecimal": 500.0
    },
    {
        "name": "maximumNumberOfResourcesPerQuery",
        "valueDecimal": 100.0
    }
  ]
}

针对特定自定义搜索参数运行重新编制索引作业

若要针对特定的自定义搜索参数运行重新编制索引作业,请在 POST 请求正文中对 JSON 格式 Parameters 的资源使用以下调用。

POST {{FHIR_URL}}/$reindex 
content-type: application/fhir+json
{ 

"resourceType": "Parameters",  

"parameter": [
    {
      "name": "targetSearchParameterTypes",
      "valueString": "{url of custom search parameter. In case of multiple custom search parameters, url list can be comma separated.}"
    }
] 

}

注意

若要检查重新编制索引作业的状态或取消作业,需要重新编制索引 ID。 这是 "id" 在响应中返回的值中传递 "parameter" 的。 在前面的示例中,重新编制索引作业的 ID 将为 560c7c61-2c70-4c54-b86d-c53a9d29495e

如何检查重编索引的状态

启动重新编制索引作业后,可以使用以下调用检查作业的状态。

GET {{FHIR URL}}/_operations/reindex/{{reindexJobId}

下面是一个示例响应。

{
    "resourceType": "Parameters",
    "id": "560c7c61-2c70-4c54-b86d-c53a9d29495e",
    "meta": {
        "versionId": "138087"
    },
    "parameter": [
        {
            "name": "id",
            "valueString": "560c7c61-2c70-4c54-b86d-c53a9d29495e"
        },
        {
            "name": "startTime",
            "valueDateTime": "2023-06-08T04:54:53.2943069+00:00"
        },
        {
            "name": "endTime",
            "valueDateTime": "2023-06-08T04:54:54.4052272+00:00"
        },
        {
            "name": "lastModified",
            "valueDateTime": "2023-06-08T04:54:54.4053002+00:00"
        },
        {
            "name": "queuedTime",
            "valueDateTime": "2023-06-08T04:52:44.0974406+00:00"
        },
        {
            "name": "totalResourcesToReindex",
            "valueDecimal": 2.0
        },
        {
            "name": "resourcesSuccessfullyReindexed",
            "valueDecimal": 2.0
        },
        {
            "name": "progress",
            "valueDecimal": 100.0
        },
        {
            "name": "status",
            "valueString": "Completed"
        },
        {
            "name": "maximumConcurrency",
            "valueDecimal": 3.0
        },
        {
            "name": "resources",
            "valueString": "{{LIST_OF_IMPACTED_RESOURCES}}"
        },
        {
            "name": "resourceReindexProgressByResource (CountReindexed of Count)",
            "valueString": "{{RESOURCE_TYPE:REINDEXED_COUNT OF TOTAL_COUNT}}"
        },
        {
            "name": "searchParams",
            "valueString": "{{LIST_OF_SEARCHPARAM_URLS}}h"
        },
        {
            "name": "queryDelayIntervalInMilliseconds",
            "valueDecimal": 500.0
        },
        {
            "name": "maximumNumberOfResourcesPerQuery",
            "valueDecimal": 100.0
        }
    ]
}

响应中显示了以下信息。

  • totalResourcesToReindex:包括在此作业中重新编制索引的资源总数。

  • resourcesSuccessfullyReindexed:此作业中已重新编制索引的资源总数。

  • progress:完成重新编制作业索引百分比。 计算为 resourcesSuccessfullyReindexed/totalResourcesToReindex x 100。

  • status:如果重新编制索引作业已排队、正在运行、完成、失败或取消,则状态。

  • resources:列出受重新编制索引作业影响的所有资源类型。

  • resourceReindexProgressByResource (CountReindexed of Count):按资源类型提供总计数的重新编制索引计数。 如果特定资源类型的重新编制索引已排队,则仅提供计数。

  • searchParams:列出受重新编制索引作业影响的搜索参数的 URL。

删除重编索引作业

如果需要取消重编索引作业,请使用删除调用并指定重编索引作业 ID:

Delete {{FHIR URL}}/_operations/reindex/{{reindexJobId}

性能注意事项

重编索引作业可能会非常耗用性能。 我们实现了一些限制控制,可帮助你管理重新编制数据库上运行的重新索引作业的方式。

注意

重编索引作业在大型数据集上运行数天的情况并不少见。 对于包含 30,000,000 个资源的数据库,我们注意到,在 100,000 个请求单位(RU)中需要 4-5 天才能重新编制整个数据库索引。

下面是一个表,概述了可用的参数、默认值和建议的范围。 可以使用这些参数加快进程(使用更多的计算)或减缓进程(使用更少的计算)。 例如,可以在低流量时间运行重新编制索引作业,并增加计算速度,使其更快完成。 还可以使用设置来确保计算使用率较低,并在后台运行数天。

参数 说明 默认值 可用范围
QueryDelayIntervalInMilliseconds 重编索引作业期间启动每批资源之间的延迟。 较小的数字会加快作业的速度,而较高的数字会降低作业速度。 500 MS(0.5 秒) 50-500000
MaximumResourcesPerQuery 要重编索引的一批资源中包含的最大资源数。 100 1-5000
MaximumConcurrency 一次完成的批数。 1 1-10
targetDataStoreUsagePercentage 可以指定用于重编索引作业的数据存储的百分比。 例如,可以指定 50%,这将确保重编索引作业最多使用 Azure Cosmos DB 上可用 RU 的 50%。 如果没有指定,则意味着最多可以使用 100%。 0-100

如果要使用上述任何参数,可以在启动重新编制索引作业时将它们传递到 Parameters 资源。

{
  "resourceType": "Parameters",
  "parameter": [
    {
      "name": "maximumConcurrency",
      "valueInteger": "3"
    },
    {
      "name": "targetDataStoreUsagePercentage",
      "valueInteger": "20"
    },
    {
      "name": "queryDelayIntervalInMilliseconds",
      "valueInteger": "1000"
    },
    {
      "name": "maximumNumberOfResourcesPerQuery",
      "valueInteger": "1"
    }
  ]
}

后续步骤

本文介绍了如何启动重新编制索引作业。 要了解如何定义需要重编索引作业的新搜索参数,请参阅

注意

FHIR® 是 HL7 的注册商标,经 HL7 许可使用。