インデックス再作成ジョブの実行
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
}
]
}
特定のカスタム検索パラメーターに対してインデックス再作成ジョブを実行する
特定のカスタム検索パラメーターに対してインデックス再作成ジョブを実行するには、次の POST
呼び出しを使用し、要求本文で JSON 形式の Parameters
リソースを使用します。
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 が必要です。 これは、応答の"parameter"
値で実行される"id"
です。 前の例では、インデックス再作成ジョブの 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 サービスには、データベースでのインデックス再作成ジョブの実行方法を管理するための調整制御が用意されています。
Note
大規模なデータ セットでは、インデックス再作成ジョブが数日にわたって実行されることも珍しくありません。
次の表は、ジョブ コンピューティング リソースのインデックス再作成を制御するために使用できるパラメーター、既定値、および推奨される範囲を示しています。 これらのパラメーターを使用して、プロセスを高速化する (コンピューティング使用量を増やす) か、低速化する (コンピューティング使用量を減らす) ことができます。
パラメーター | 説明 | 既定値 | 使用可能な範囲 |
---|---|---|---|
QueryDelayIntervalInMilliseconds |
インデックス再作成ジョブの実行中に開始されるリソースの各バッチ間の遅延。 数値を小さくするとジョブの速度が上がり、大きい方が遅くなります。 | 500 ミリ秒 (0.5 秒) | 50 ~ 500000 |
MaximumResourcesPerQuery |
インデックスを再作成するバッチに含まれるリソースの最大数。 | 100 | 1 ~ 5000 |
MaximumConcurrency |
一度に実行するバッチの数。 | 1 | 1 ~ 10 |
上記のパラメーターのいずれかを使用する場合は、インデックス再作成ジョブを開始する最初のPOST
要求を送信するときに、それらを Parameters
リソースに渡すことができます。
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 サービスでインデックス再作成ジョブを実行する方法について説明しました。 カスタム検索パラメーターを定義する方法については、以下を参照してください。
Note
FHIR® は HL7 の登録商標であり、HL7 の許可を得て使用しています。