スクロール検索は、マッチしたドキュメントをバッチ単位で反復処理することで、大量の結果セットを取得します。最大 5,000 件のドキュメントを返す通常の検索とは異なり、スクロール検索はこの制限を超える結果を取得するために設計されています。
スクロール検索は、データエクスポート、分析、機械学習ジョブなどのバッチ処理タスク向けに設計されており、リアルタイムまたはインタラクティブなユーザークエリには適していません。5,000 件未満の結果セットの場合は、通常の検索を使用してください。
スクロール検索の仕組み
スクロール検索は、次の 2 つのフェーズで実行されます。
-
スクロールの開始:
search_type=scanとscrollパラメーターを指定して検索リクエストを送信します。レスポンスはスクロール ID を返しますが、ドキュメントは返されません。 -
バッチの取得:前のレスポンスから取得したスクロール ID を渡して、次のバッチのドキュメントを取得します。レスポンスの
items配列が空になるまで繰り返します。
各スクロール ID は、scroll パラメーターで指定された期間有効です。スクロール ID の有効期限が切れる前に次のバッチを取得しない場合、スクロールセッションは終了し、ステップ 1 から再開する必要があります。
リクエストパラメーター
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
scroll |
STRING | はい | スクロール ID の有効期間。数値の後に単位を指定します。週 (w)、日 (d)、時間 (h)、分 (m)、秒 (s)。例: 1m。最初のリクエストでのみ必須です。 |
search_type |
STRING | はい (最初のリクエストのみ) | スクロール検索のタイプ。scan に設定します。最初のリクエストでのみ必須です。 |
scroll_id |
STRING | はい (2 回目以降のリクエスト) | 前のレスポンスで返されたスクロール ID。最初のリクエストでは不要です。 |
fetch_fields |
STRING | いいえ | 検索結果で返すフィールド。 |
レスポンスパラメーター
| パラメーター | 型 | 説明 |
|---|---|---|
status |
STRING | リクエストの結果。有効な値: OK (成功) または FAIL (失敗)。FAIL の場合、errors フィールドでエラーコードを確認してください。 |
request_id |
STRING | トラブルシューティング用のリクエスト ID。 |
result |
OBJECT | 検索結果。searchtime、total、num、viewtotal、items、facet、scroll_id を含みます。 |
errors |
ARRAY | エラーの詳細。error_message フィールドにエラーメッセージを含みます。詳細については、「エラーコード」をご参照ください。 |
スクロール検索の結果は、fullJSON または JSON フォーマットでのみ返されます。
スクロール検索の実行
ステップ 1: スクロールの開始
search_type=scan と scroll 値を指定して最初のリクエストを送信します。レスポンスはスクロール ID と空の items 配列を含みます。この段階ではドキュメントは返されません。
最初のリクエストのレスポンス例:
{
"status": "OK",
"request_id": "150150574119953661605242",
"result": {
"searchtime": 0.005029,
"total": 1,
"num": 0,
"viewtotal": 1,
"scroll_id": "eJxtUMtuhDAM/BrvOYQC5cABdulvRFFIirsm2TpBavv1Ndut1EMlS36NZ0Y2ZHMxbueceAjIuWCMnrPjRITLyfzZm83y9VQVGT8x80U3PxQNUqieVZV1/an4ItbTUBPSx5wgXqKdvOSbmuKR8ZYjGWWirB4tvToAiX7u3G2eCNK77vnz8GlGPAV6suKBeqxAn0OiTd7NGEnesspyoyFLF6hecn4JUKjVgp0K3FnkfMfIyPoDuYWegX9GeYOpicY9TG8gwOSuBL04X1MMg3ROwCesLlG6X7a2o=",
"items": [],
"facet": []
},
"errors": [],
"tracer": ""
}
ステップ 2: ドキュメントバッチの取得
前のレスポンスから取得した scroll_id を渡して、次のバッチを取得します。レスポンスのスクロール ID は、リクエストごとに更新されます。常に最新のものを使用してください。
最初のリクエストでhitパラメーターを設定して、バッチサイズを制御します。この値はセッション全体で固定されます。後続のリクエストでhitを変更しても効果はありません。各バッチには最大 500 件のドキュメントを含めることができます。
後続のリクエストのレスポンス例:
{
"status": "OK",
"request_id": "150150574119952551519970",
"result": {
"searchtime": 0.006293,
"total": 1,
"num": 1,
"viewtotal": 1,
"scroll_id": "eJxNT9tugzAM/RrznIRC4YEHaNlvRFFIhteQtE6Qtn39TNdJk2z5dnx8rIPJRdudcqKhl60Uir2Vp06ISv8b6s3QbZCVzpaCdp93XXBzg2wEW9MJ2dWq8q7YVXt0YckDLlBP0WyOw31N8YgYizZEnAUsjkx4VT4k8zexpjiNS/XYHX0NNkWP71BfVyxQjxLUxSfazFH4PYSPnCL3iMniDZq3jN98aFRCgGrZniy8/itkBHWGuYVeQH+B+QzTCUZ1NJ9gj4FVMfrQPr8Y+Hk+dgU14fIDVhtfTw==",
"items": [
{
"fields": {
"cate_id": "0",
"float_arr": "0",
"id": "1",
"int_arr": "0",
"literal_arr": "Search",
"name": "Search",
"phone": "1381111****",
"index_name": "app_schema_demo"
},
"property": {},
"attribute": {},
"variableValue": {},
"sortExprValues": [
"1"
]
}
],
"facet": []
},
"errors": [],
"tracer": ""
}
ステップ 3: 結果の終了の検出
items が空の配列の場合、すべてのドキュメントが取得され、スクロールセッションが完了しています。この時点でリクエストの送信を停止してください。
{
"status": "OK",
"request_id": "150150574119952551519971",
"result": {
"searchtime": 0.001234,
"total": 1,
"num": 0,
"viewtotal": 1,
"scroll_id": "eJxNT9tugzAM/RrznIRC4YEHaNlvRFFIhteQtE6Qtn39TNdJk2z5dnx8rIPJRdudcqKhl60Uir2Vp06ISv8b6s3QbZCVzpaCdp93XXBzg2wEW9MJ2dWq8q7YVXt0YckDLlBP0WyOw31N8YgYizZEnAUsjkx4VT4k8zexpjiNS/XYHX0NNkWP71BfVyxQjxLUxSfazFH4PYSPnCL3iMniDZq3jN98aFRCgGrZniy8/itkBHWGuYVeQH+B+QzTCUZ1NJ9gj4FVMfrQPr8Y+Hk+dgU14fIDVhtfTw==",
"items": [],
"facet": []
},
"errors": [],
"tracer": ""
}
制限事項
| 制限事項 | 詳細 |
|---|---|
| サポートされていない機能 | 集計句、distinct 句、基本ソート式、高度ソート式、クエリ分析はサポートされていません。 |
| ソート | ソートは、INT 型の単一フィールドでのみサポートされています。OpenSearch API および SDK バージョン V3 以降が必要です。 |
| ページネーション | config 句の start パラメーターは、スクロール検索中は効果がありません。常にデフォルト値 0 が使用され、ページをスキップすることはできません。 |
| バッチサイズ | 各バッチには最大 500 件のドキュメントを含めることができます。最初のリクエストで hit パラメーターを設定して、バッチあたりのドキュメント数を制御します。 |
| アプリケーション間のスクロール | アプリケーション間のスクロール検索はサポートされていません。 |
| レスポンスフォーマット | 結果は fullJSON または JSON フォーマットでのみ返されます。 |
トラブルシューティング
エラー:「Scroll_id is expired」
次のバッチが取得される前にスクロール ID の有効期限が切れました。scroll パラメーターを変更し、ステップ 1 からスクロールセッションを再開してください。
無効な scroll_id
リクエストの scroll_id パラメーターの値が無効な場合、エラーが発生します。
エラーの確認
errors フィールドのエラーコードとメッセージを使用して問題を診断してください。status フィールドのみに依存しないでください。詳細については、「エラーコード」をご参照ください。