Выполнение задания повторной индексации в 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.