Ejecución de un trabajo de reindexación en Azure API for FHIR

Hay escenarios en los que puede tener parámetros de ordenación o búsqueda en Azure API for FHIR que todavía no se indexaron. Este escenario procede cuando se definen parámetros de búsqueda propios. No puede utilizar un parámetro de búsqueda en una búsqueda hasta que se lo indexe. En este artículo se explica cómo ejecutar un trabajo de reindexación para indexar parámetros de búsqueda que aún no se han indexado en la base de datos del servicio FHIR.

Advertencia

Antes de empezar, lea todo el artículo. Un trabajo de reindexación puede requerir mucho rendimiento. En este artículo se incluyen opciones para limitar y controlar el trabajo de reindexación.

Procedimientos para ejecutar un trabajo de reindexación

El trabajo de reindexación se puede ejecutar en toda la base de datos del servicio FHIR y en un parámetro de búsqueda personalizado específico.

Ejecución del trabajo de reindexación en toda la base de datos del servicio FHIR

Para ejecutar el trabajo de reindexación, use la siguiente POST llamada con el recurso con formato Parameters JSON en el cuerpo de la solicitud:

POST {{FHIR URL}}/$reindex 

{ 

“resourceType”: “Parameters”,  

“parameter”: [] 

}

Deje el "parameter": [] campo en blanco (como se muestra) si no necesita ajustar los recursos asignados al trabajo de reindexación.

Si la solicitud se realiza correctamente, recibirá un código de estado 201 Creado además de un Parameters recurso en la respuesta.

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
    }
  ]
}

Ejecución del trabajo de reindexación en un parámetro de búsqueda personalizado específico

Para ejecutar el trabajo de reindexación en un parámetro de búsqueda personalizado específico, use la siguiente POST llamada con el recurso con Parameters formato JSON en el cuerpo de la solicitud:

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 seperated.}"
    }
] 

}

Nota

Para comprobar el estado de un trabajo de reindexación o cancelar el trabajo, necesitará el identificador de reindexación. Este es el "id" objeto que se lleva en el "parameter" valor devuelto en la respuesta. En el ejemplo anterior, el identificador del trabajo de reindexación sería 560c7c61-2c70-4c54-b86d-c53a9d29495e.

Comprobación del estado de un trabajo de reindexación

Una vez que inicia un trabajo de reindexación, puede comprobar el estado del trabajo mediante la siguiente llamada:

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

Una respuesta de ejemplo:

{
    "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
        }
    ]
}

La siguiente información se muestra en la respuesta anterior:

  • totalResourcesToReindex: incluye el número total de recursos que se vuelven a indexar en este trabajo.

  • resourcesSuccessfullyReindexed: el número total de recursos que ya se han reindexado en este trabajo.

  • progress: porcentaje de trabajo de reindexación completado. Es igual a resourcesSuccessfullyReindexed/totalResourcesToReindex x 100.

  • status: indica si el trabajo de reindexación está en cola, en ejecución, completado, con errores o cancelado.

  • resources: enumera todos los tipos de recursos afectados por el trabajo de reindexación.

  • 'resourceReindexProgressByResource (CountReindexed of Count)': proporciona un recuento reindexado del recuento total, por tipo de recurso. En los casos en los que se pone en cola la reindexación de un tipo de recurso específico, solo se proporciona Count.

  • 'searchParams': muestra la dirección URL de los parámetros de búsqueda afectados por el trabajo de reindexación.

Eliminación de un trabajo de reindexación

Si necesita cancelar un trabajo de reindexación, use una llamada de eliminación y especifique el identificador del trabajo de reindexación:

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

Consideraciones de rendimiento

Un trabajo de reindexación puede requerir mucho rendimiento. Hemos implementado algunos controles de limitación para ayudarlo a administrar cómo se ejecutará un trabajo de reindexación en la base de datos.

Nota

En los conjuntos de datos de gran tamaño, no es poco frecuente que la ejecución de un trabajo de reindexación dure varios días. En el caso de una base de datos con 30 000 000 millones de recursos, observamos que la reindexación de toda la base de datos tardó entre 4 y 5 días a 100 000 RU.

A continuación se muestra una tabla en la que se describen los parámetros disponibles, los valores predeterminados y los intervalos recomendados. Puede usar estos parámetros, ya sea para acelerar el proceso (usar más), o para ralentizarlo (usar menos). Por ejemplo, podría ejecutar el trabajo de reindexación a una hora de poco tráfico y aumentar el proceso para que se haga más rápido. Por el contrario, podría usar la configuración para garantizar un uso bajo de proceso y hacer que se ejecute durante varios días en segundo plano.

Parámetro Descripción Valor predeterminado Intervalo disponible
QueryDelayIntervalInMilliseconds Retraso entre cada lote de recursos que se va a iniciar durante el trabajo de reindexación. Un número más pequeño acelerará el trabajo y uno mayor lo ralentizará. 500 MS (0,5 segundos) 50-500 000
MaximumResourcesPerQuery Número máximo de recursos incluidos en el lote de recursos que se van a reindexar. 100 1-5000
MaximumConcurrency Es el número de lotes que se realiza al mismo tiempo. 1 1-10
targetDataStoreUsagePercentage Permite especificar el porcentaje del almacén de datos que se va a usar para el trabajo de reindexación. Por ejemplo, podría especificar el 50 % y eso garantizaría que el trabajo de reindexación usaría, como máximo, el 50 % de las RU disponibles en Azure Cosmos DB. No existe, lo que significa que se puede usar hasta el 100 %. 0-100

Si desea usar cualquiera de los parámetros anteriores, puede pasarlos al recurso Parameters al iniciar el trabajo de reindexación.

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

Pasos siguientes

En este artículo aprendió a iniciar un trabajo de reindexación. Si desea aprender a definir parámetros de búsqueda nuevos que requieran el trabajo de reindexación, consulte

FHIR® es una marca registrada de HL7 y se usa con su permiso.