Pencarian scroll mengambil set hasil yang besar dengan melakukan iterasi melalui batch dokumen yang cocok. Berbeda dengan pencarian biasa yang mengembalikan paling banyak 5.000 dokumen, pencarian scroll dirancang untuk mengambil lebih banyak hasil melebihi batas tersebut.
Pencarian scroll dirancang untuk tugas pemrosesan batch seperti ekspor data, analitik, dan pekerjaan pembelajaran mesin—bukan untuk kueri pengguna real-time atau interaktif. Untuk set hasil yang berisi kurang dari 5.000 dokumen, gunakan pencarian biasa sebagai gantinya.
Cara kerja pencarian scroll
Pencarian scroll berjalan dalam dua tahap:
-
Initiate the scroll — Kirim permintaan pencarian dengan
search_type=scandan parameterscroll. Responsnya mengembalikan scroll ID tetapi tidak mengembalikan dokumen. -
Retrieve batches — Gunakan scroll ID dari respons sebelumnya untuk mengambil batch dokumen berikutnya. Ulangi hingga array
itemsdalam respons kosong.
Setiap scroll ID berlaku selama durasi yang ditentukan oleh parameter scroll. Jika Anda tidak mengambil batch berikutnya sebelum scroll ID kedaluwarsa, sesi scroll berakhir dan Anda harus memulai ulang dari langkah 1.
Parameter permintaan
| Parameter | Type | Required | Description |
|---|---|---|---|
scroll |
STRING | Yes | Periode validitas scroll ID, ditentukan sebagai angka diikuti satuan: minggu (w), hari (d), jam (h), menit (m), atau detik (s). Contoh: 1m. Diperlukan hanya untuk permintaan pertama. |
search_type |
STRING | Yes (first request only) | Jenis pencarian scroll. Atur ke scan. Diperlukan hanya untuk permintaan pertama. |
scroll_id |
STRING | Yes (subsequent requests) | Scroll ID yang dikembalikan oleh respons sebelumnya. Tidak diperlukan untuk permintaan pertama. |
fetch_fields |
STRING | No | Bidang yang akan dikembalikan dalam hasil pencarian. |
Parameter respons
| Parameter | Type | Description |
|---|---|---|
status |
STRING | Hasil permintaan. Nilai yang valid: OK (sukses) atau FAIL (gagal). Jika FAIL, periksa bidang errors untuk kode kesalahan. |
request_id |
STRING | ID permintaan, digunakan untuk troubleshooting. |
result |
STRING | Hasil pencarian, termasuk searchtime, total, num, viewtotal, items, facet, dan scroll_id. |
errors |
STRING | Detail kesalahan. Bidang error_message berisi pesan kesalahan. Lihat Error codes. |
Hasil pencarian scroll hanya dikembalikan dalam format fullJSON atau JSON.
Jalankan pencarian scroll
Langkah 1: Memulai scroll
Kirim permintaan pertama dengan search_type=scan dan nilai scroll. Responsnya berisi scroll ID dan array items kosong—tidak ada dokumen yang dikembalikan pada tahap ini.
Contoh respons untuk permintaan pertama:
{
"status": "OK",
"request_id": "150150574119953661605242",
"result": {
"searchtime": 0.005029,
"total": 1,
"num": 0,
"viewtotal": 1,
"scroll_id": "eJxtUMtuhDAM/BrvOYQC5cABdulvRFFIirsm2TpBavv1Ndut1EMlS36NZ0Y2ZHMxbueceAjIuWCMnrPjRITLyfzZm83y9V QVGT8x80U3PxQNUqieVZV1/an4ItbTUBPSx5wgXqKdvOSbmuKR8ZYjGWWirB4tvToAiX7u3G2eCNK77vnz8GlGPAV6suKBeqxAn0OiTd7NGEnesspyoyFLF6hecn4JUKjVgp0K3FnkfMfIyPoDuYWegX9GeYOpicY9TG8gwOSuBL04X1 MMg3ROwCesLlG6X7a2o=",
"items": [],
"facet": []
},
"errors": [],
"tracer": ""
}
Langkah 2: Ambil Batch Dokumen
Gunakan scroll_id dari respons sebelumnya untuk mengambil batch berikutnya. Scroll ID dalam respons diperbarui pada setiap permintaan—selalu gunakan yang paling baru.
Atur parameterhitpada permintaan pertama untuk mengontrol ukuran batch. Nilai ini bersifat tetap selama seluruh sesi; mengubahhitpada permintaan berikutnya tidak berpengaruh. Setiap batch dapat berisi paling banyak 500 dokumen.
Contoh respons untuk permintaan lanjutan:
{
"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",
"litteral_arr": "Search",
"name": "Search",
"phone": "1381111****",
"index_name": "app_schema_demo"
},
"property": {},
"attribute": {},
"variableValue": {},
"sortExprValues": [
"1"
]
}
],
"facet": []
},
"errors": [],
"tracer": ""
}
Langkah 3: Mendeteksi akhir hasil
Ketika items berupa array kosong, semua dokumen telah diambil dan sesi scroll selesai. Hentikan pengiriman permintaan pada titik ini.
{
"items": []
}
Batasan
| Limitation | Details |
|---|---|
| Unsupported features | Klausa agregat, klausa distinct, ekspresi penyortiran kasar, ekspresi penyortiran halus, dan analisis query tidak didukung. |
| Sorting | Penyortiran hanya didukung pada satu bidang bertipe INT. Memerlukan OpenSearch API dan SDK versi V3 atau lebih baru. |
| Pagination | Parameter start dalam klausa konfigurasi tidak berpengaruh selama pencarian scroll. Nilai default 0 selalu digunakan, dan halaman tidak dapat dilewati. |
| Batch size | Setiap batch dapat berisi paling banyak 500 dokumen. Atur parameter hit pada permintaan pertama untuk mengontrol jumlah dokumen per batch. |
| Cross-application scrolling | Pencarian scroll lintas aplikasi tidak didukung. |
| Response format | Hasil hanya dikembalikan dalam format fullJSON atau JSON. |
Troubleshooting
Error: "Scroll_id is expired"
Scroll ID kedaluwarsa sebelum batch berikutnya diambil. Perbarui parameter scroll dan mulai ulang sesi scroll dari langkah 1.
Invalid scroll_id
Jika nilai parameter scroll_id dalam permintaan tidak valid, terjadi kesalahan.
Checking for errors
Gunakan kode kesalahan dan pesan dalam bidang errors untuk mendiagnosis kegagalan—jangan hanya mengandalkan bidang status. Lihat Error codes untuk daftar lengkapnya.