Uruchamianie zadania ponownego indeksu w usłudze Azure API for FHIR
Ważne
Usługa Azure API for FHIR zostanie wycofana 30 września 2026 r. Postępuj zgodnie ze strategiami migracji, aby przejść do usługi Azure Health Data Services FHIR® do tej daty. Ze względu na wycofanie usługi Azure API for FHIR nowe wdrożenia nie będą możliwe od 1 kwietnia 2025 r. Usługa FHIR usług Azure Health Data Services to rozwinięta wersja usługi Azure API for FHIR, która umożliwia klientom zarządzanie usługami FHIR, DICOM i MedTech z integracją z innymi usługami platformy Azure.
Istnieją scenariusze, w których można wyszukiwać lub sortować parametry w interfejsie AZURE API for FHIR®, które nie zostały jeszcze indeksowane. Ten scenariusz jest istotny podczas definiowania własnych parametrów wyszukiwania. Dopóki parametr wyszukiwania nie zostanie zaindeksowany, nie można go użyć w wyszukiwaniu. W tym artykule opisano sposób uruchamiania zadania ponownego indeksowania parametrów wyszukiwania w bazie danych usługi FHIR.
Ostrzeżenie
Przed rozpoczęciem pracy należy przeczytać cały 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 względem 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
{
“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 201 oprócz Parameters
zasobu w odpowiedzi, jak w poniższym przykładzie.
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 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 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 poprzednim przykładzie identyfikator zadania ponownego indeksowania 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}
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": "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
}
]
}
Poniższe informacje są wyświetlane w odpowiedzi.
totalResourcesToReindex
: obejmuje łączną liczbę zasobów, które są ponownie indeksowane w tym zadaniu.resourcesSuccessfullyReindexed
: całkowita liczba zasobów, które zostały już ponownie zindeksowane w tym zadaniu.progress
: Procent wykonania zadania ponownego indeksu. Obliczone jakoresourcesSuccessfullyReindexed
/totalResourcesToReindex
x 100.status
: określa, czy zadanie ponownego indeksu jest w kolejce, uruchomione, ukończone, zakończone, zakończone lub anulowane.resources
: Wyświetla listę wszystkich typów zasobów, których dotyczy zadanie ponownego indeksu.resourceReindexProgressByResource (CountReindexed of Count)
: Zawiera ponownie zindeksowaną liczbę łącznej liczby według typu zasobu. W przypadkach, gdy ponowne indeksowanie dla określonego typu zasobu jest kolejkowane, 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, 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 zasobów zauważyliśmy, że ponowne indeksowanie całej bazy danych trwało od 4 do 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ć obciążenie obliczeniowe, aby przyspieszyć jego wykonywanie. Możesz również użyć ustawień, aby zapewnić niskie użycie zasobów obliczeniowych i uruchamiać je przez kilka dni w tle.
Parametr | Opis | Wartość domyślna | Dostępny zakres |
---|---|---|---|
QueryDelayIntervalInMilliseconds | Opóźnienie między każdą partią zasobów uruchamianych podczas zadania ponownego indeksowania. Mniejsza liczba przyspiesza zadanie, gdy większa liczba spowalnia ją. | 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ć wartość 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 definiować nowe parametry wyszukiwania, które wymagają zadania ponownego indeksowania, zobacz
Uwaga
FHIR® jest zastrzeżonym znakiem towarowym HL7 i jest używany z uprawnieniem HL7.