インデックス再作成ジョブの実行

Azure Health Data Services の FHIR サービスに、まだインデックスが作成されていない検索パラメーターがあるシナリオがあります。 このシナリオは、独自のカスタム検索パラメーターを定義する場合に関連します。 検索パラメーターのインデックスが作成されるまでは、ライブ運用では使用できません。 この記事では、インデックス再作成ジョブを実行して、FHIR サービス データベースでまだインデックスが作成されていないカスタム検索パラメーターのインデックスを作成する方法について説明します。

警告

作業を始める前に、この記事全体に目を通すことは重要です。 インデックス再作成ジョブには、非常に高いパフォーマンスが要求される可能性があります。 この記事では、インデックス再作成ジョブを調整および制御する方法のオプションについて説明します。

インデックス再作成ジョブの実行方法

インデックス再作成ジョブは、FHIR サービス データベース全体と特定のカスタム検索パラメーターに対して実行できます。

FHIR サービス データベース全体でインデックス再作成ジョブを実行する

インデックス再作成ジョブを実行するには、要求本文で JSON 形式Parametersのリソースで次の呼び出しを使用しますPOST

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

"resourceType": "Parameters",  

"parameter": [] 

}

インデックス再作成ジョブに "parameter": [] 割り当てられているリソースを調整する必要がない場合は、フィールドを空白のままにします (図参照)。

要求が成功した場合は、応答のリソースに加えてParameters、201 Created 状態コードを受け取ります。

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
        }
    ]
}

特定のカスタム検索パラメーターに対してインデックス再作成ジョブを実行する

特定のカスタム検索パラメーターに対してインデックス再作成ジョブを実行するには、要求本文で JSON 形式Parametersのリソースで次の呼び出しを使用しますPOST

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

}

Note

インデックス再作成ジョブの状態をチェックしたり、ジョブを取り消したりするには、インデックス再作成 ID が必要です。 これは、 "id" 応答で "parameter" 返される値に含まれる です。 上記の例では、インデックス再作成ジョブの ID は 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 使用し、インデックス再作成ジョブ ID を指定します。

DELETE {{FHIR URL}}/_operations/reindex/{{reindexJobId}}

パフォーマンスに関する考慮事項

インデックス再作成ジョブには、非常に高いパフォーマンスが要求される可能性があります。 FHIR サービスには、データベースでのインデックス再作成ジョブの実行方法を管理するのに役立つ調整制御がいくつか用意されています。

注意

大規模なデータ セットでは、インデックス再作成ジョブが数日にわたって実行されることも珍しくありません。

次の表は、ジョブ コンピューティング リソースのインデックス再作成を制御するために使用できるパラメーター、既定値、および推奨される範囲を示しています。 これらのパラメーターを使用して、プロセスを高速化する (コンピューティング使用量を増やす) か、低速化する (コンピューティング使用量を減らす) ことができます。

パラメーター 説明 [Default] 使用可能な範囲
QueryDelayIntervalInMilliseconds インデックス再作成ジョブの実行中に開始されるリソースの各バッチ間の遅延。 数値を小さくするとジョブの速度が上がり、より大きな数値を指定するとジョブの速度が低下します。 500 ミリ秒 (0.5 秒) 50 から 500000
MaximumResourcesPerQuery インデックスを再作成するリソースのバッチに含めるリソース数の上限。 100 1 ~ 5000
MaximumConcurrency 一度に実行するバッチの数。 1 1 ~ 10

上記のいずれかのパラメーターを使用する場合は、インデックス再作成ジョブを開始する最初POSTParameters要求を送信するときに、それらをリソースに渡すことができます。


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 の許可を得て使用しています。