Share via


Esecuzione di un processo reindex nell'API di Azure per FHIR

Esistono scenari in cui potrebbero essere presenti parametri di ricerca o ordinamento nell'API di Azure per FHIR che non sono ancora stati indicizzati. Questo scenario è rilevante quando si definiscono i propri parametri di ricerca. Finché il parametro di ricerca non viene indicizzato, non può essere usato nella ricerca. Questo articolo illustra come eseguire un processo di reindex per indicizzare i parametri di ricerca che non sono ancora stati indicizzati nel database del servizio FHIR.

Avviso

È importante leggere l'intero articolo prima di iniziare. Un processo di reindex può essere molto elevato. Questo articolo include opzioni per la limitazione e il controllo del processo di reindex.

Come eseguire un processo di reindex

Il processo reindex può essere eseguito su un intero database del servizio FHIR e su un parametro di ricerca personalizzato specifico.

Eseguire il processo di reindex sull'intero database del servizio FHIR

Per eseguire il processo di reindex, usare la chiamata seguente POST con la risorsa formattata Parameters JSON nel corpo della richiesta:

POST {{FHIR URL}}/$reindex 

{ 

“resourceType”: “Parameters”,  

“parameter”: [] 

}

Lasciare vuoto il "parameter": [] campo (come illustrato) se non è necessario modificare le risorse allocate al processo di reindex.

Se la richiesta ha esito positivo, viene visualizzato un codice di stato creato 201 oltre a una Parameters risorsa nella risposta.

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

Eseguire il processo di reindex con un parametro di ricerca personalizzato specifico

Per eseguire il processo di reindex su un parametro di ricerca personalizzato specifico, usare la chiamata seguente POST con la risorsa formattata Parameters JSON nel corpo della richiesta:

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

Per controllare lo stato di un processo di reindex o per annullare il processo, sarà necessario l'ID reindex. Questo è il "id""parameter" valore riportato nel valore restituito nella risposta. Nell'esempio precedente l'ID per il processo reindex sarà 560c7c61-2c70-4c54-b86d-c53a9d29495e.

Come controllare lo stato di un processo di reindex

Dopo aver avviato un processo di reindex, è possibile controllare lo stato del processo usando la chiamata seguente:

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

Risposta di esempio:

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

Le informazioni seguenti vengono visualizzate nella risposta precedente:

  • totalResourcesToReindex: include il numero totale di risorse reindexed in questo processo.

  • resourcesSuccessfullyReindexed: numero totale di risorse già reindexed in questo processo.

  • progress: Reindex job percent complete. resourcesSuccessfullyReindexed/totalResourcesToReindex Uguale a x 100.

  • status: indica se il processo reindex viene accodato, in esecuzione, completato, non riuscito o annullato.

  • resources: elenca tutti i tipi di risorse interessati dal processo di reindex.

  • 'resourceReindexProgressByResource (CountReindexed of Count)': fornisce il numero reindexed del conteggio totale, per tipo di risorsa. Nei casi in cui la reindexing per un tipo di risorsa specifico viene accodata, viene fornito solo Conteggio.

  • 'searchParams': elenca l'URL dei parametri di ricerca interessati dal processo di reindex.

Eliminare un processo di reindex

Se è necessario annullare un processo di reindex, usare una chiamata di eliminazione e specificare l'ID processo reindex:

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

Considerazioni sulle prestazioni

Un processo di reindex può essere molto intensivo. Sono stati implementati alcuni controlli di limitazione che consentono di gestire il modo in cui verrà eseguito un processo di reindex nel database.

Nota

Non è raro che i set di dati di grandi dimensioni vengano eseguiti per giorni da un processo di reindex. Per un database con 30.000.000 milioni di risorse, si è notato che è necessario 4-5 giorni a 100K UR per reindicizzare l'intero database.

Di seguito è riportata una tabella che illustra i parametri, le impostazioni predefinite e gli intervalli consigliati disponibili. È possibile usare questi parametri per velocizzare il processo (usare più calcolo) o rallentare il processo (usare meno calcolo). Ad esempio, è possibile eseguire il processo di reindex in un tempo di traffico ridotto e aumentare il calcolo per ottenere il completamento più rapido. È invece possibile usare le impostazioni per garantire un utilizzo ridotto del calcolo e usarlo per giorni in background.

Parametro Descrizione Default Intervallo disponibile
QueryDelayIntervalInMilliseconds Ritardo tra ogni batch di risorse avviata durante il processo di reindex. Un numero più piccolo accelera il processo mentre un numero più alto lo rallenta. 500 MS (5 secondi) 50-500000
MaximumResourcesPerQuery Numero massimo di risorse incluse nel batch di risorse da reindicizzare. 100 1-5000
Massimaconcurrency Numero di batch eseguiti alla volta. 1 1-10
targetDataStoreUsagePercentage Consente di specificare la percentuale dell'archivio dati da usare per il processo di reindex. Ad esempio, è possibile specificare il 50% e assicurarsi che al massimo il processo di reindex userebbe il 50% delle UR disponibili in Azure Cosmos DB. Non presente, il che significa che è possibile usare fino al 100%. 0-100

Se si vuole usare uno dei parametri precedenti, è possibile passarli alla risorsa Parametri quando si avvia il processo di reindex.

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

Passaggi successivi

In questo articolo si è appreso come avviare un processo di reindex. Per informazioni su come definire nuovi parametri di ricerca che richiedono il processo di reindex, vedere

FHIR® è un marchio registrato di HL7 e viene usato con l'autorizzazione HL7.