Выполнение задания повторной индексации в Azure API для FHIR
Существуют сценарии, в которых у вас могут быть параметры поиска или сортировки в Azure API для FHIR, которые еще не были проиндексированы. Этот сценарий уместный при определении собственных параметров поиска. Пока параметр поиска не проиндексирован, его нельзя использовать в поиске. В этой статье описывается, как выполнить задание повторной индексации для индексирования параметров поиска, которые еще не были проиндексированы в базе данных службы FHIR.
Предупреждение
Важно прочитать всю эту статью, прежде чем приступить к работе. Задание повторной индексации может быть очень ресурсоемким. В этой статье описаны способы регулирования задания повторной индексации и управления ими.
Как выполнить задание повторной индексации
Задание повторной индексации может выполняться для всей базы данных службы FHIR и для определенного настраиваемого параметра поиска.
Выполнение задания повторной индексации для всей базы данных службы FHIR
Чтобы запустить задание повторной индексации, используйте следующий POST
вызов с ресурсом в формате Parameters
JSON в тексте запроса:
POST {{FHIR URL}}/$reindex
{
“resourceType”: “Parameters”,
“parameter”: []
}
Оставьте поле пустым "parameter": []
(как показано ниже), если не нужно настраивать ресурсы, выделенные для задания повторной индексации.
Если запрос выполнен успешно, вы получите код состояния 201 Created в дополнение к ресурсу 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": "\"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
}
]
}
Выполнение задания повторной индексации для определенного настраиваемого параметра поиска
Чтобы выполнить задание повторной индексации для определенного настраиваемого параметра поиска, используйте следующий POST
вызов с ресурсом в формате Parameters
JSON в тексте запроса:
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.}"
}
]
}
Примечание
Чтобы проверка состояние задания повторной индексации или отменить задание, потребуется идентификатор повторной индексации. Это переносимая "id"
в значении, "parameter"
возвращаемом в ответе. В приведенном выше примере идентификатором задания повторной индексации будет 560c7c61-2c70-4c54-b86d-c53a9d29495e
.
Как проверка состояние задания повторной индексации
После запуска задания повторной индексации можно проверка состояние задания с помощью следующего вызова:
GET {{FHIR URL}}/_operations/reindex/{{reindexJobId}
Пример ответа:
{
"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
}
]
}
В приведенном выше ответе отображаются следующие сведения:
totalResourcesToReindex
: включает общее количество ресурсов, которые переиндексируются в этом задании.resourcesSuccessfullyReindexed
: общее количество ресурсов, которые уже были переиндексированы в этом задании.progress
: процент завершения задания повторной индексации. РавноresourcesSuccessfullyReindexed
/totalResourcesToReindex
x 100.status
: указывает, что задание повторной индексации поставлено в очередь, выполняется, завершено, завершилось или отменено.resources
: выводит список всех типов ресурсов, затронутых заданием повторной индексации.'resourceReindexProgressByResource (CountReindexed of Count)': предоставляет повторное число общего количества ресурсов для каждого типа ресурса. В случаях, когда переиндексация для определенного типа ресурса помещается в очередь, предоставляется только count.
searchParams: список URL-адресов параметров поиска, затронутых заданием повторной индексации.
Удаление задания повторной индексации
Если необходимо отменить задание повторной индексации, используйте вызов delete и укажите идентификатор задания повторной индексации:
Delete {{FHIR URL}}/_operations/reindex/{{reindexJobId}
Вопросы производительности
Задание повторной индексации может быть достаточно ресурсоемким. Мы реализовали некоторые элементы управления регулированием, которые помогут вам управлять выполнением задания повторной индексации в базе данных.
Примечание
В больших наборах данных задание повторной индексации выполняется в течение нескольких дней. Для базы данных с 30 000 000 миллионами ресурсов мы заметили, что для переиндексации всей базы данных потребовалось 4–5 дней с 100 000 ЕЗ.
Ниже приведена таблица с доступными параметрами, значениями по умолчанию и рекомендуемыми диапазонами. Эти параметры можно использовать, чтобы ускорить процесс (использовать больше вычислительных ресурсов) или замедлить процесс (использовать меньше вычислительных ресурсов). Например, можно запустить задание повторной индексации при низком времени трафика и увеличить объем вычислительных ресурсов, чтобы сделать это быстрее. Вместо этого можно использовать параметры, чтобы обеспечить низкое использование вычислительных ресурсов и обеспечить их выполнение в течение нескольких дней в фоновом режиме.
Параметр | Описание | Default | Доступный диапазон |
---|---|---|---|
QueryDelayIntervalInMilliseconds | Задержка между каждым пакетом ресурсов, запускаемых во время задания повторной индексации. Меньшее число ускорит задание, в то время как большее число замедлит его. | 500 МС (5 секунд) | 50-500000 |
MaximumResourcesPerQuery | Максимальное количество ресурсов, включенных в пакет ресурсов для переиндексации. | 100 | 1-5000 |
MaximumConcurrency | Количество пакетов, выполненных за раз. | 1 | 1–10 |
targetDataStoreUsagePercentage | Позволяет указать, какой процент хранилища данных будет использоваться для задания повторной индексации. Например, можно указать 50 % и гарантировать, что задание повторной индексации будет использовать не более 50 % доступных ЕЗ в Azure Cosmos DB. | Отсутствует. Это означает, что можно использовать до 100 %. | 0–100 |
Если вы хотите использовать любой из указанных выше параметров, их можно передать в ресурс Parameters при запуске задания повторной индексации.
{
"resourceType": "Parameters",
"parameter": [
{
"name": "maximumConcurrency",
"valueInteger": "3"
},
{
"name": "targetDataStoreUsagePercentage",
"valueInteger": "20"
},
{
"name": "queryDelayIntervalInMilliseconds",
"valueInteger": "1000"
},
{
"name": "maximumNumberOfResourcesPerQuery",
"valueInteger": "1"
}
]
}
Дальнейшие действия
Из этой статьи вы узнали, как запустить задание повторной индексации. Сведения о том, как определить новые параметры поиска, требующие задания повторной индексации, см. в статье.
FHIR® является зарегистрированным товарным знаком HL7 и используется с разрешения HL7.