Share via


Execução de um trabalho de reindexação na API do Azure para FHIR

Existem cenários em que você pode ter parâmetros de pesquisa ou de classificação na API do Azure para FHIR que ainda não foram indexados. Esse cenário é relevante quando você define seus próprios parâmetros de pesquisa. Até que o parâmetro de pesquisa seja indexado, não poderá ser usado na pesquisa. Este artigo aborda como executar um trabalho de reindexação para indexar parâmetros de pesquisa que ainda não foram indexados em seu banco de dados de serviço FHIR.

Aviso

É importante que você leia este artigo inteiro, antes de começar. Um trabalho de reindexação pode exigir alto desempenho. Este artigo inclui opções de como restringir e controlar o trabalho de reindexação.

Como executar um trabalho de reindexação

O trabalho reindexar pode ser executado em todo o banco de dados do serviço FHIR e em um parâmetro de pesquisa personalizado específico.

Executar o trabalho reindexar em todo o banco de dados do serviço FHIR

Para executar o trabalho reindexar, use a seguinte POST chamada com o recurso formatado Parameters em JSON no corpo da solicitação:

POST {{FHIR URL}}/$reindex 

{ 

“resourceType”: “Parameters”,  

“parameter”: [] 

}

Deixe o "parameter": [] campo em branco (conforme mostrado) se você não precisar ajustar os recursos alocados para o trabalho reindexar.

Se a solicitação for bem-sucedida, você receberá um código 201 Criado status além de um Parameters recurso na resposta.

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

Executar o trabalho reindexar em um parâmetro de pesquisa personalizado específico

Para executar o trabalho reindexar em um parâmetro de pesquisa personalizado específico, use a seguinte POST chamada com o recurso formatado Parameters em JSON no corpo da solicitação:

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

}

Observação

Para marcar o status de um trabalho de reindexação ou cancelar o trabalho, você precisará da ID de reindexação. Esse é o "id" valor carregado "parameter" retornado na resposta. No exemplo acima, a ID do trabalho de reindexação seria 560c7c61-2c70-4c54-b86d-c53a9d29495e.

Como verificar o status de um trabalho de reindexação

Depois de iniciar um trabalho de reindexação, você pode verificar o status do trabalho usando a seguinte chamada:

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

Um exemplo de resposta:

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

As seguintes informações são mostradas na resposta acima:

  • totalResourcesToReindex: inclui o número total de recursos que estão sendo reindexados neste trabalho.

  • resourcesSuccessfullyReindexed: o número total de recursos que já foram reindexados neste trabalho.

  • progress: porcentagem de trabalho reindexada concluída. É igual a resourcesSuccessfullyReindexed/totalResourcesToReindex x 100.

  • status: declara se o trabalho de reindexação está na fila, em execução, concluído, com falha ou cancelado.

  • resources: lista todos os tipos de recursos afetados pelo trabalho reindexar.

  • 'resourceReindexProgressByResource (CountReindexed de Count)': fornece contagem reindexada da contagem total, por tipo de recurso. Nos casos em que a reindexação de um tipo de recurso específico é enfileirada, somente Contagem é fornecida.

  • 'searchParams': lista a URL dos parâmetros de pesquisa afetados pelo trabalho reindexar.

Excluir um trabalho de reindexação

Se você precisar cancelar um trabalho de reindexação, use uma chamada de exclusão e especifique a ID do trabalho de reindexação:

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

Considerações sobre o desempenho

Um trabalho de reindexação pode exigir alto desempenho. Implementamos alguns controles de limitação para ajudar a gerenciar a maneira como um trabalho de reindexação será executado no banco de dados.

Observação

Em grandes conjuntos de dados, é comum que um trabalho de reindexação seja executado por dias. Para um banco de dados com 30 milhões de recursos, percebemos que levou de 4 a 5 dias a 100 mil RUs para reindexar todo o banco de dados.

Veja abaixo uma tabela que descreve os parâmetros disponíveis, os padrões e os intervalos recomendados. Você pode usar esses parâmetros para acelerar o processo (usar mais computação) ou retardar o processo (usar menos computação). Por exemplo, você pode executar o trabalho de reindexação em um tempo de tráfego baixo e aumentar a computação para que seja feito mais rápido. Em vez disso, você pode usar as configurações para garantir um baixo uso da computação e executá-la por dias em segundo plano.

Parâmetro Descrição Default Intervalo Disponível
QueryDelayIntervalInMilliseconds O atraso entre cada lote de recursos que está sendo iniciado durante o trabalho de reindexação. Um número menor acelerará o trabalho, enquanto um número maior o desacelerará. 500 MS (0,5 segundos) 50-500000
MaximumResourcesPerQuery O número máximo de recursos incluídos no lote de recursos a serem reindexados. 100 1-5000
MaximumConcurrency O número de lotes feitos de cada vez. 1 1-10
targetDataStoreUsagePercentage Permite que você especifique qual percentual do armazenamento de dados deve ser usado para o trabalho de reindexação. Por exemplo, você pode especificar 50% e isso garantiria que, no máximo, o trabalho de reindexação usaria 50% das RUs disponíveis no Azure Cosmos DB. Não está presente, o que significa que até 100% podem ser usados. 0-100

Se você quiser usar qualquer um dos parâmetros acima, poderá passá-los para o recurso Parâmetros quando iniciar o trabalho de reindexação.

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

Próximas etapas

Neste artigo, você aprendeu a iniciar um trabalho de reindexação. Para saber como definir novos parâmetros de pesquisa que exigem o trabalho de reindexação, confira

FHIR® é uma marca registrada da HL7 e é usado com a permissão da HL7.