Выполнение задания повторной индексации

Существуют сценарии, в которых у вас могут быть параметры поиска в службе FHIR в службах azure Health Data Services, которые еще не проиндексированы. Этот сценарий является актуальным при определении собственных параметров пользовательского поиска. Пока параметр поиска не будет проиндексирован, его нельзя использовать в динамической рабочей среде. В этой статье описывается, как выполнить задание повторной индексации для индексирования всех параметров пользовательского поиска, которые еще не были проиндексированы в базе данных службы FHIR.

Предупреждение

Прежде чем приступить к работе, важно прочитать всю эту статью. Задание повторной индексации может быть очень ресурсоемким. В этой статье рассматриваются варианты регулирования задания повторной индексации и управления ими.

Как выполнить задание повторной индексации

Задание повторной индексации может выполняться для всей базы данных службы FHIR и для определенного параметра пользовательского поиска.

Выполнение задания повторной индексации для всей базы данных службы FHIR

Чтобы запустить задание повторной индексации, используйте следующий POST вызов с ресурсом в формате Parameters JSON в тексте запроса:

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

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

}

Примечание

Чтобы проверка состояние задания повторной индексации или отменить задание, потребуется идентификатор повторной индексации. Это объект , "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}}"
        },
        {
            "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}}

Вопросы производительности

Задание повторной индексации может быть весьма ресурсоемким. Служба FHIR предлагает некоторые элементы управления регулированием, помогающие управлять выполнением задания повторной индексации в базе данных.

Примечание

В больших наборах данных нередки случаи, когда задание повторной индексации выполняется в течение нескольких дней.

Ниже приведена таблица с доступными параметрами, значениями по умолчанию и рекомендуемыми диапазонами для управления вычислительными ресурсами повторной индексации задания. Эти параметры можно использовать для ускорения процесса (используйте больше вычислительных ресурсов) или замедления процесса (используйте меньше вычислительных ресурсов).

Параметр Описание Default Доступный диапазон
QueryDelayIntervalInMilliseconds Задержка между запуском каждого пакета ресурсов во время задания повторной индексации. Меньшее число ускоряет выполнение задания, а большее число замедляет его. 500 МС (5 секунд) от 50 до 500000
MaximumResourcesPerQuery Максимальное количество ресурсов, включенных в пакет ресурсов для переиндексации. 100 1-5000
MaximumConcurrency Количество пакетов, выполненных за раз. 1 1–10

Если вы хотите использовать любой из указанных выше параметров, вы можете передать их в Parameters ресурс при отправке начального POST запроса на запуск задания повторной индексации.


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

Дальнейшие действия

Из этой статьи вы узнали, как выполнить задание повторной индексации в службе FHIR. Чтобы узнать, как определить параметры пользовательского поиска, см. раздел

FHIR® является зарегистрированным товарным знаком HL7 и используется с разрешения HL7.