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.