Exécution d’un travail de réindexation dans l’API Azure pour FHIR

Il existe des scénarios où vous pouvez avoir des paramètres de recherche ou de tri dans l’API Azure pour FHIR qui n’ont pas encore été indexés. Ce scénario est pertinent lorsque vous définissez vos propres paramètres de recherche. Tant que le paramètre de recherche n’est pas indexé, il ne peut pas être utilisé dans la recherche. Cet article explique comment exécuter une tâche de réindexation pour indexer les paramètres de recherche qui n’ont pas encore été indexés dans votre base de données de service FHIR.

Avertissement

Il est important de lire cet article en entier avant de commencer. Une tâche de réindexation peut être très gourmande en performances. Cet article inclut des options pour limiter et contrôler le travail de réindexation.

Guide pratique pour exécuter un travail de réindexation

Le travail de réindexation peut être exécuté sur l’ensemble de la base de données du service FHIR et sur un paramètre de recherche personnalisé spécifique.

Exécuter le travail de réindexation sur l’ensemble de la base de données du service FHIR

Pour exécuter le travail de réindexation, utilisez l’appel suivant POST avec la ressource au Parameters format JSON dans le corps de la demande :

POST {{FHIR URL}}/$reindex 

{ 

“resourceType”: “Parameters”,  

“parameter”: [] 

}

Laissez le "parameter": [] champ vide (comme indiqué) si vous n’avez pas besoin d’ajuster les ressources allouées au travail de réindexation.

Si la demande réussit, vous recevez un code 201 Created status en plus d’une Parameters ressource dans la réponse.

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

Exécuter le travail de réindexation sur un paramètre de recherche personnalisé spécifique

Pour exécuter une tâche de réindexation sur un paramètre de recherche personnalisée spécifique, utilisez l’appel suivant POST avec la ressource au Parameters format JSON dans le corps de la demande :

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

}

Notes

Pour case activée la status d’une tâche de réindexation ou pour annuler le travail, vous avez besoin de l’ID de réindexation. Il s’agit de la "id" valeur portée dans la "parameter" valeur retournée dans la réponse. Dans l’exemple ci-dessus, l’ID du travail de réindexation serait 560c7c61-2c70-4c54-b86d-c53a9d29495e.

Comment vérifier l’état d’un travail de réindexation

Une fois que vous avez démarré une tâche de réindexation, vous pouvez vérifier l’état de la tâche à l’aide de l’appel suivant :

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

Voici un exemple de réponse :

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

Les informations suivantes sont affichées dans la réponse ci-dessus :

  • totalResourcesToReindex: inclut le nombre total de ressources réindexées dans ce travail.

  • resourcesSuccessfullyReindexed: nombre total de ressources qui ont déjà été réindexées dans ce travail.

  • progress: Réindexer le pourcentage de travail terminé. resourcesSuccessfullyReindexed/totalResourcesToReindex Est égal à x 100.

  • status: indique si la tâche de réindexation est mise en file d’attente, en cours d’exécution, terminée, en échec ou annulée.

  • resources: répertorie tous les types de ressources affectés par le travail de réindexation.

  • 'resourceReindexProgressByResource (CountReindexed of Count)' : fournit le nombre réindexé du nombre total, par type de ressource. Dans les cas où la réindexation pour un type de ressource spécifique est mise en file d’attente, seul Count est fourni.

  • ' searchParams' : répertorie l’URL des paramètres de recherche affectés par le travail de réindexation.

Supprimer une tâche de réindexation

Si vous devez annuler une tâche de réindexation, utilisez un appel de suppression et spécifiez l’ID de la tâche de réindexation :

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

Considérations relatives aux performances

Une tâche de réindexation peut être très gourmande en performances. Nous avons implémenté certains contrôles de limitation pour vous aider à gérer l’exécution d’une tâche de réindexation sur votre base de données.

Notes

Il n’est pas rare que les jeux de données volumineux d’une tâche de réindexation s’exécutent pendant des jours. Pour une base de données avec 30 000 000 millions de ressources, nous avons remarqué qu’il a fallu 4 à 5 jours à 100 000 RU pour réindexer l’intégralité de la base de données.

Vous trouverez ci-dessous un tableau décrivant les paramètres disponibles, les valeurs par défaut et les plages recommandées. Vous pouvez utiliser ces paramètres pour accélérer le processus (utiliser plus de calcul) ou ralentir le processus (utiliser moins de calcul). Par exemple, vous pouvez exécuter le travail de réindexation sur un temps de trafic faible et augmenter votre calcul pour le faire plus rapidement. Au lieu de cela, vous pouvez utiliser les paramètres pour garantir une faible utilisation du calcul et l’exécuter pendant des jours en arrière-plan.

Paramètre Description Par défaut Plage disponible
QueryDelayIntervalInMilliseconds Délai entre chaque lot de ressources lancée pendant la tâche de réindexation. Un nombre plus petit accélère le travail, tandis qu’un nombre plus élevé le ralentit. 500 MS (0,5 secondes) 50-500 000
MaximumResourcesPerQuery Nombre maximal de ressources incluses dans le lot de ressources à réindexer. 100 1-5 000
MaximumConcurrency Nombre de lots effectués à la fois. 1 1-10
targetDataStoreUsagePercentage Vous permet de spécifier le pourcentage de votre magasin de données à utiliser pour le travail de réindexation. Par exemple, vous pouvez spécifier 50 % et garantir qu’au maximum la tâche de réindexation utiliserait 50 % des unités de requête disponibles sur Azure Cosmos DB. Non présent, ce qui signifie qu’un maximum de 100 % peut être utilisé. 0-100

Si vous souhaitez utiliser l’un des paramètres ci-dessus, vous pouvez les transmettre à la ressource Paramètres lorsque vous démarrez la tâche de réindexation.

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

Étapes suivantes

Dans cet article, vous avez appris à démarrer une tâche de réindexation. Pour savoir comment définir de nouveaux paramètres de recherche qui nécessitent la tâche de réindexation, consultez

FHIR® est une marque déposée de HL7 utilisé avec l’autorisation de HL7.