Udostępnij za pośrednictwem


Uruchamianie zadania ponownego indeksu w usłudze Azure API for FHIR

Istnieją scenariusze, w których możesz mieć parametry wyszukiwania lub sortowania w usłudze Azure API for FHIR, które nie zostały jeszcze indeksowane. Ten scenariusz ma zastosowanie podczas definiowania własnych parametrów wyszukiwania. Dopóki parametr wyszukiwania nie zostanie zaindeksowany, nie będzie można go używać w wyszukiwaniu. W tym artykule opisano sposób uruchamiania zadania ponownego indeksowania parametrów wyszukiwania, które nie zostały jeszcze indeksowane w bazie danych usługi FHIR.

Ostrzeżenie

Przed rozpoczęciem pracy należy przeczytać cały ten artykuł. Zadanie ponownego indeksu może być bardzo intensywnie obciążane wydajnością. Ten artykuł zawiera opcje ograniczania przepustowości i kontrolowania zadania ponownego indeksowania.

Jak uruchomić zadanie ponownego indeksowania

Zadanie ponownego indeksowania można wykonać względem całej bazy danych usługi FHIR i dla określonego parametru wyszukiwania niestandardowego.

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 w Parameters formacie JSON w treści żądania:

POST {{FHIR URL}}/$reindex 

{ 

“resourceType”: “Parameters”,  

“parameter”: [] 

}

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

Jeśli żądanie zakończy się pomyślnie, otrzymasz kod stanu 201 Utworzony oprócz Parameters zasobu w odpowiedzi.

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

Uruchamianie zadania ponownego indeksu względem 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 w Parameters 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 seperated.}"
    }
] 

}

Uwaga

Aby sprawdzić stan zadania ponownego indeksowania lub anulować zadanie, potrzebny będzie identyfikator ponownego indeksowania. Jest to wartość przenoszona "id" w "parameter" wartości zwróconej w odpowiedzi. W powyższym przykładzie identyfikator zadania ponownego indeksu to 560c7c61-2c70-4c54-b86d-c53a9d29495e.

Jak sprawdzić stan zadania ponownego indeksowania

Po uruchomieniu zadania ponownego indeksowania możesz sprawdzić stan zadania przy użyciu następującego wywołania:

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

Przykładowa 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": "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
        }
    ]
}

W powyższej odpowiedzi przedstawiono następujące informacje:

  • totalResourcesToReindex: obejmuje łączną liczbę zasobów, które są ponownie indeksowane w tym zadaniu.

  • resourcesSuccessfullyReindexed: łączna liczba zasobów, które zostały już ponownie zindeksowane w tym zadaniu.

  • progress: Procent wykonania zadania ponownego indeksu. Równa się resourcesSuccessfullyReindexed/totalResourcesToReindex x 100.

  • status: określa, czy zadanie ponownego indeksu jest w kolejce, uruchomione, ukończone, zakończone niepowodzeniem lub anulowane.

  • resources: wyświetla listę wszystkich typów zasobów, których dotyczy zadanie ponownego indeksu.

  • "resourceReindexProgressByResource (CountReindexed of Count)": Udostępnia ponownie indeksowaną liczbę łącznej liczby według typu zasobu. W przypadkach, gdy ponowne indeksowanie określonego typu zasobu jest ustawiane w kolejce, podano tylko liczbę.

  • "searchParams": wyświetla adres URL parametrów wyszukiwania, których dotyczy zadanie ponownego indeksowania.

Usuwanie zadania ponownego indeksowania

Jeśli musisz anulować zadanie ponownego indeksowania, użyj wywołania usuwania 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ą. Zaimplementowaliśmy pewne kontrolki ograniczania przepustowości, aby ułatwić zarządzanie sposobem uruchamiania zadania ponownego indeksowania w bazie danych.

Uwaga

Nie jest rzadkością w przypadku dużych zestawów danych dla zadania ponownego indeksowania, które ma być uruchamiane przez kilka dni. W przypadku bazy danych z 30 000 000 milionów zasobów zauważyliśmy, że ponowne indeksowanie całej bazy danych zajęło 4–5 dni.

Poniżej znajduje się tabela przedstawiająca dostępne parametry, wartości domyślne i zalecane zakresy. Możesz użyć tych parametrów, aby przyspieszyć proces (użyć większej ilości zasobów obliczeniowych) lub spowolnić proces (użyj mniejszej ilości zasobów obliczeniowych). Można na przykład uruchomić zadanie ponownego indeksowania w krótkim czasie ruchu i zwiększyć moc obliczeniową, aby przyspieszyć jego wykonywanie. Zamiast tego można użyć ustawień, aby zapewnić niskie użycie zasobów obliczeniowych i uruchomić je przez kilka dni w tle.

Parametr Opis Domyślny Dostępny zakres
QueryDelayIntervalInMilliseconds Opóźnienie między każdą partią zasobów uruchamianych podczas zadania ponownego indeksowania. Mniejsza liczba przyspieszy zadanie, a większa liczba spowolni je. 500 MS (5 sekund) 50-500000
MaximumResourcesPerQuery Maksymalna liczba zasobów uwzględnionych w partii zasobów do ponownego indeksowania. 100 1-5000
MaximumConcurrency Liczba partii wykonanych jednocześnie. 1 1-10
targetDataStoreUsagePercentage Umożliwia określenie procentu magazynu danych do użycia dla zadania ponownego indeksowania. Można na przykład określić 50% i zapewnić, że co najwyżej zadanie ponownego indeksowania będzie używać 50% dostępnych jednostek RU w usłudze Azure Cosmos DB. Nie ma, co oznacza, że można użyć do 100%. 0-100

Jeśli chcesz użyć dowolnego z powyższych parametrów, możesz przekazać je do zasobu Parameters podczas uruchamiania zadania ponownego indeksowania.

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

Następne kroki

W tym artykule przedstawiono sposób uruchamiania zadania ponownego indeksowania. Aby dowiedzieć się, jak zdefiniować nowe parametry wyszukiwania wymagające zadania ponownego indeksowania, zobacz

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