Exécution d’un travail de réindexation dans l’API Azure pour FHIR
Important
L’API Azure pour FHIR sera mise hors service le 30 septembre 2026. Suivez les stratégies de migration pour passer au service FHIR® de Services de données de santé Azure d’ici à cette date. En raison de la mise hors service de l’API Azure pour FHIR, les nouveaux déploiements ne seront plus autorisés à compter du 1er avril 2025. Le service FHIR des Services de données de santé Azure est la version évoluée de l’API Azure pour FHIR qui permet aux clients de gérer les services FHIR, DICOM et MedTech avec des intégrations dans d’autres services Azure.
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 un travail de réindexation pour indexer les paramètres de recherche 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
Un travail de réindexation peut être exécuté sur la base de données de service FHIR entière et sur des paramètres de recherche personnalisés spécifiques.
Exécuter le travail de réindexation sur l’ensemble de la base de données de service FHIR
Pour exécuter un travail de réindexation, utilisez l’appel suivant POST
avec la ressource au format Parameters
JSON dans le corps de la requête.
POST {{FHIR URL}}/$reindex
{
“resourceType”: “Parameters”,
“parameter”: []
}
Laissez le "parameter": []
champ vide (comme indiqué) si vous n’avez pas besoin de modifier les ressources allouées au travail de réindexation.
Si la demande réussit, vous recevez un code d’état 201 créé en plus d’une Parameters
ressource dans la réponse, comme dans l’exemple suivant.
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 un 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é spécifique, utilisez l’appel suivant POST
avec la ressource au format Parameters
JSON dans le corps de la requête.
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.}"
}
]
}
Remarque
Pour vérifier l’état d’un travail de réindexation ou pour annuler le travail, vous aurez besoin de l’ID de réindexation. Il s’agit de "id"
la "parameter"
valeur retournée dans la réponse. Dans l’exemple précédent, 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é un travail de réindexation, vous pouvez vérifier l’état du travail à 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.
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éindexez le pourcentage de travail terminé. Calculé en tant queresourcesSuccessfullyReindexed
/totalResourcesToReindex
x 100.status
: Indique si la tâche de réindexation est mise en file d’attente, en cours d’exécution, terminée, ayant échoué ou annulée.resources
: répertorie tous les types de ressources affectés par la tâche de réindexation.resourceReindexProgressByResource (CountReindexed of Count)
: fournit un nombre réindexé du nombre total, par type de ressource. Dans les cas où la réindexation d’un type de ressource spécifique est mise en file d’attente, seul le nombre est fourni.searchParams
: répertorie l’URL des paramètres de recherche affectés par la tâche 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é des contrôles de limitation pour vous aider à gérer l’exécution d’un travail de réindexation sur votre base de données.
Remarque
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 ressources, nous avons remarqué qu’il a fallu 4 à 5 jours à 100 000 unités de requête (RU) pour réindexer toute la base de données.
Voici 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 la tâche de réindexation à un temps de trafic faible et augmenter votre calcul pour l’obtenir plus rapidement. Vous pouvez également 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 alors 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 précédents, vous pouvez les transmettre à la ressource Parameters 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 un travail de réindexation. Pour savoir comment définir de nouveaux paramètres de recherche qui nécessitent la tâche de réindexation, consultez
Remarque
FHIR® est une marque déposée de HL7 utilisé avec l’autorisation de HL7.