Ausführen eines Neuindizierungsauftrags in Azure API for FHIR
Es gibt Szenarien, in denen Sie möglicherweise über Such- oder Sortierparameter in der Azure API for FHIR verfügen, die noch nicht indiziert wurden. Dieses Szenario ist relevant, wenn Sie Ihre eigenen Suchparameter definieren. Solange der Suchparameter nicht indiziert wurde, kann er nicht in einer Suche verwendet werden. In diesem Artikel wird beschrieben, wie Sie einen Neuindizierungsauftrag zum Indizieren von Suchparametern ausführen, die noch nicht in Ihrer FHIR-Dienstdatenbank indiziert wurden.
Warnung
Es ist wichtig, dass Sie den ganzen Artikel lesen, bevor Sie beginnen. Ein Neuindizierungsauftrag kann sehr leistungsintensiv sein. Dieser Artikel enthält Optionen zum Drosseln und Steuern des Neuindizierungsauftrags.
Ausführen eines Auftrags zum Neuindizieren
Der Neuindizierungsauftrag kann für die gesamte FHIR-Dienstdatenbank und für einen bestimmten benutzerdefinierten Suchparameter ausgeführt werden.
Ausführen eines Neuindizierungsauftrags für die gesamte FHIR-Dienstdatenbank
Verwenden Sie zum Ausführen des Auftrags für die erneute Indizierung den folgenden POST
Aufruf mit der im JSON-Format formatierten Parameters
Ressource im Anforderungstext:
POST {{FHIR URL}}/$reindex
{
“resourceType”: “Parameters”,
“parameter”: []
}
Lassen Sie das "parameter": []
Feld leer (wie gezeigt), wenn Sie die Ressourcen, die dem Neuindizierungsauftrag zugeordnet sind, nicht optimieren müssen.
Wenn die Anforderung erfolgreich ist, erhalten Sie zusätzlich zu einer Ressource in der Antwort den Parameters
Code 201 Created status.
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
}
]
}
Ausführen eines Neuindizierungsauftrags für einen bestimmten benutzerdefinierten Suchparameter
Verwenden Sie den folgenden POST
Aufruf mit der im JSON-Format formatierten Parameters
Ressource im Anforderungstext, um einen Neuindizierungsauftrag für einen bestimmten benutzerdefinierten Suchparameter auszuführen:
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.}"
}
]
}
Hinweis
Um die status eines Neuindizierungsauftrags zu überprüfen oder den Auftrag abzubrechen, benötigen Sie die Neuindizierungs-ID. Dies ist die "id"
in dem in der "parameter"
Antwort zurückgegebenen Wert. Im obigen Beispiel wäre die ID für den Neuindizierungsauftrag 560c7c61-2c70-4c54-b86d-c53a9d29495e
.
Überprüfen des Status eines Neuindizierungsauftrags
Nachdem Sie einen Neuindizierungsauftrag gestartet haben, können Sie den Status des Auftrags mithilfe des folgenden Aufrufs überprüfen:
GET {{FHIR URL}}/_operations/reindex/{{reindexJobId}
Beispielantwort:
{
"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
}
]
}
Die folgenden Informationen werden in der obigen Antwort angezeigt:
totalResourcesToReindex
: Enthält die Gesamtanzahl der Ressourcen, die in diesem Auftrag neu indiziert werden.resourcesSuccessfullyReindexed
: Die Gesamtanzahl der Ressourcen, die bereits in diesem Auftrag neu indiziert wurden.progress
: Auftrag in Prozent abgeschlossen neu indizieren.resourcesSuccessfullyReindexed
/totalResourcesToReindex
Entspricht x 100.status
: Gibt an, wenn der Neuindizierungsauftrag in die Warteschlange eingereiht, ausgeführt, abgeschlossen, fehlgeschlagen oder abgebrochen wird.resources
: Listet alle Ressourcentypen auf, die vom Neuindizierungsauftrag betroffen sind.'resourceReindexProgressByResource (CountReindexed of Count)': Stellt die neu indizierte Anzahl der Gesamtanzahl pro Ressourcentyp bereit. In Fällen, in denen die erneute Indizierung für einen bestimmten Ressourcentyp in die Warteschlange eingereiht wird, wird nur Count bereitgestellt.
'searchParams': Listet die URL der Suchparameter auf, die vom Neuindizierungsauftrag betroffen sind.
Löschen eines Neuindizierungsauftrags
Wenn Sie einen Neuindizierungsauftrag abbrechen müssen, verwenden Sie einen Löschaufruf, und geben Sie die Neuindizierungsauftrags-ID an:
Delete {{FHIR URL}}/_operations/reindex/{{reindexJobId}
Überlegungen zur Leistung
Ein Neuindizierungsauftrag kann ziemlich leistungsintensiv sein. Wir haben einige Drosselungssteuerelemente implementiert, um Ihnen bei der Verwaltung zu helfen, wie ein Neuindizierungsauftrag in Ihrer Datenbank ausgeführt wird.
Hinweis
Es ist bei großen Datasets nicht ungewöhnlich, dass ein Neuindizierungsauftrag über Tage ausgeführt wird. Bei einer Datenbank mit 30.000.000 Millionen Ressourcen wurde festgestellt, dass es bei 100K RUs 4–5 Tage gedauert hat, bis die gesamte Datenbank neu indiziert war.
Unten sehen Sie eine Tabelle, die die verfügbaren Parameter, Standardeinstellungen und empfohlenen Bereiche darlegt. Sie können diese Parameter verwenden, um den Prozess zu beschleunigen (mehr Computeresssourcen verwenden) oder um ihn zu verlangsamen (weniger Computeressourcen verwenden). Beispielsweise könnten Sie den Neuindizierungsauftrag zu einer Zeit mit geringem Datenverkehr ausführen und Ihre Computeressourcen erhöhen, um ihn schneller zu erledigen. Stattdessen könnten Sie die Einstellungen verwenden, um eine niedrige Auslastung der Computeressourcen sicherzustellen, und ihn tagelang im Hintergrund laufen lassen.
Parameter | Beschreibung | Standard | Verfügbarer Bereich |
---|---|---|---|
QueryDelayIntervalInMilliseconds | Die Verzögerung zwischen jedem Batch von Ressourcen, die während des Neuindizierungsauftrags gestartet werden. Eine kleinere Zahl beschleunigt den Auftrag, während ihn eine höhere Zahl verlangsamt. | 500 ms (0,5 Sekunden) | 50–500000 |
MaximumResourcesPerQuery | Die maximale Anzahl von Ressourcen, die im Batch der Ressourcen zur Neuindizierung enthalten sind. | 100 | 1–5000 |
MaximumConcurrency | Die Anzahl der Batches, die gleichzeitig ausgeführt werden. | 1 | 1 - 10 |
targetDataStoreUsagePercentage | Ermöglicht Ihnen, anzugeben, welcher Prozentsatz Ihres Datenspeichers für den Neuindizierungsauftrag verwendet werden soll. Beispielsweise könnten Sie 50 % angeben, was sicherstellen würde, dass der Neuindizierungsauftrag maximal 50 % der verfügbaren RUs in Azure Cosmos DB verwenden würde. | Nicht angegeben, was bedeutet, dass bis zu 100 % verwendet werden können. | 0–100 |
Wenn Sie einen der oben genannten Parameter verwenden möchten, können Sie diese(n) beim Starten des Neuindizierungsauftrags an die Parameterressource übergeben.
{
"resourceType": "Parameters",
"parameter": [
{
"name": "maximumConcurrency",
"valueInteger": "3"
},
{
"name": "targetDataStoreUsagePercentage",
"valueInteger": "20"
},
{
"name": "queryDelayIntervalInMilliseconds",
"valueInteger": "1000"
},
{
"name": "maximumNumberOfResourcesPerQuery",
"valueInteger": "1"
}
]
}
Nächste Schritte
In diesem Artikel haben Sie erfahren, wie Sie einen Neuindizierungsauftrag starten. Informationen zum Definieren neuer Suchparameter, die den Neuindizierungsauftrag erfordern, finden Sie unter
FHIR® ist eine eingetragene Marke von HL7 und wird mit Genehmigung von HL7 verwendet.