Uruchamianie zadania ponownego indeksowania w usłudze FHIR

Niektóre scenariusze wymagają ponownego indeksowania parametrów wyszukiwania w usłudze FHIR® w Azure Health Data Services. Ten scenariusz jest istotny podczas definiowania własnych niestandardowych parametrów wyszukiwania. Dopóki parametr wyszukiwania nie zostanie zaindeksowany, nie będzie można go używać w środowisku produkcyjnym na żywo. W tym artykule wyjaśniono, jak uruchomić zadanie ponownego indeksowania w celu indeksowania dowolnych niestandardowych parametrów wyszukiwania w bazie danych usługi FHIR.

Ostrzeżenie

Przeczytaj cały artykuł przed rozpoczęciem pracy. Zadanie ponownego indeksu może być bardzo intensywnie obciążane wydajnością. W tym artykule omówiono opcje ograniczania i sterowania zadaniem ponownego indeksowania.

Jak uruchomić zadanie ponownego indeksowania

Zadanie ponownego indeksowania można uruchomić względem całej bazy danych usługi FHIR lub dla określonych niestandardowych parametrów wyszukiwania.

Uruchamianie zadania ponownego indeksowania w całej bazie danych usługi FHIR

Aby uruchomić zadanie ponownego indeksowania, użyj następującego POST wywołania z zasobem sformatowanym Parameters w formacie JSON w treści żądania.

POST {{FHIR_URL}}/$reindex 
content-type: application/fhir+json
{ 

"resourceType": "Parameters",  

"parameter": [] 

}

Jeśli nie musisz dostosowywać zasobów przydzielonych do zadania ponownego indeksowania, pozostaw "parameter": [] pole puste (jak pokazano).

Jeśli żądanie zakończy się pomyślnie, otrzymasz kod stanu 201 Created, a w odpowiedzi zostanie zwrócony również zasób Parameters.

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": "138035"
    },
    "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": "maximumNumberOfResourcesPerQuery",
            "valueDecimal": 100.0
        },
        {
            "name": "maximumNumberOfResourcesPerWrite",
            "valueDecimal": 100.0
        }
    ]
}

Uruchom zadanie ponownego indeksowania dla określonego niestandardowego parametru wyszukiwania

Aby uruchomić zadanie ponownego indeksowania względem określonego niestandardowego parametru wyszukiwania, użyj następującego POST wywołania z zasobem sformatowanym Parameters w formacie JSON w treści żądania.

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

}

Uwaga

Aby sprawdzić stan zadania ponownego indeksowania lub anulować je, potrzebny jest identyfikator ponownego indeksowania. Identyfikator ponownego indeksowania to "id", znajdujący się w wartości "parameter" odpowiedzi. W poprzednim przykładzie identyfikator zadania ponownego indeksowania to 560c7c61-2c70-4c54-b86d-c53a9d29495e.

Jak sprawdzić stan zadania ponownego indeksowania

Po uruchomieniu zadania ponownego indeksowania sprawdź jego stan za pomocą następującego wywołania.

GET {{FHIR_URL}}/_operations/reindex/{{reindexJobId}}

Poniżej przedstawiono przykładową odpowiedź.

{
    "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": "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}}"
        },
        {
            "name": "maximumNumberOfResourcesPerQuery",
            "valueDecimal": 100.0
        },
        {
            "name": "maximumNumberOfResourcesPerWrite",
            "valueDecimal": 100.0
        }
    ]
}

W poprzedniej odpowiedzi przedstawiono następujące informacje:

Parametr Description
totalResourcesToReindex Całkowita liczba zasobów, które zadanie ponownie indeksuje.
resourcesSuccessfullyReindexed Całkowita liczba zasobów ponownie indeksowanych przez zadanie.
progress Procent ukończenia zadania ponownego indeksowania. Równa się resourcesSuccessfullyReindexed podzielone przez totalResourcesToReindex razy 100.
status Stan zadania ponownego indeksowania. Może być w kolejce, uruchomione, ukończone, nieudane lub anulowane.
resources Wszystkie typy zasobów, które obejmuje zadanie ponownego indeksowania.
resourceReindexProgressByResource (CountReindexed of Count) Liczba elementów ponownie zindeksowanych z łącznej liczby według typu zasobu. Jeśli ponowne indeksowanie dla określonego typu zasobu jest kolejkowane, zostanie podana tylko liczba.
searchParams Adres URL parametrów wyszukiwania, które ma wpływ na zadanie ponownego indeksowania.

Anuluj zadanie ponownego indeksowania

Aby anulować zadanie ponownego indeksowania, użyj DELETE wywołania i określ identyfikator zadania ponownego indeksowania.

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

Zagadnienia dotyczące wydajności

Zadanie ponownego indeksu może być dość intensywnie obciążane wydajnością. Usługa FHIR oferuje kontrolki ograniczania przepustowości, aby ułatwić zarządzanie uruchamianiem zadania ponownego indeksowania w bazie danych. Użyj parametru MaximumResourcesPerQuery , aby przyspieszyć proces (użyć większej ilości zasobów obliczeniowych) lub spowolnić proces (użyj mniejszej ilości zasobów obliczeniowych). Parametr MaximumResourcesPerQuery ustawia maksymalną liczbę zasobów uwzględnionych w partii do ponownego indeksowania. Wartość domyślna to 100 i można ustawić wartość z zakresu od 1 do 5000. Przykładowe żądanie z parametrem:


POST {{FHIR_URL}}/$reindex 
content-type: application/fhir+json
{
  "resourceType": "Parameters",
  "parameter": [
    {
      "name": "maximumNumberOfResourcesPerQuery",
      "valueInteger": "1"
    }
  ]
}

Uwaga

Nierzadko zdarza się, że ponowne indeksowanie dużych zestawów danych może trwać kilka dni.

Następne kroki

W tym artykule przedstawiono sposób wykonywania zadania ponownego indeksowania w usłudze FHIR. Aby dowiedzieć się, jak definiować parametry wyszukiwania niestandardowego, zobacz

Uwaga

FHIR® jest zastrzeżonym znakiem towarowym HL7 i jest używany z uprawnieniem HL7.