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.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla