Jika panggilan kueri selesai secara normal, panggilan akan menampilkan hasilnya sebagai objek SearchResults
. Objek hasil memberi tahu Anda berapa banyak dokumen yang cocok yang ditemukan dalam indeks, dan berapa banyak dokumen yang cocok yang ditampilkan. Objek hasil juga menyertakan daftar ScoredDocuments
yang cocok. Daftar tersebut biasanya berisi sebagian dari semua dokumen yang cocok yang ditemukan, karena penelusuran menampilkan sejumlah dokumen yang terbatas setiap kali dipanggil. Dengan menggunakan offset atau kursor, Anda dapat mengambil semua dokumen yang cocok, satu subset setiap kalinya.
Hasil
Bergantung pada nilai opsi kueri limit
, jumlah dokumen yang cocok yang ditampilkan dalam hasil mungkin kurang dari jumlah yang ditemukan. Ingatlah bahwa jumlah yang ditemukan akan berupa perkiraan jika jumlah yang ditemukan memiliki akurasi lebih kecil dari jumlah yang ditemukan. Terlepas dari cara Anda mengonfigurasi opsi penelusuran, panggilan search()
tidak akan menemukan lebih dari 10.000 dokumen yang cocok.
Jika dokumen yang ditemukan lebih banyak daripada yang ditampilkan dan Anda ingin mengambil semuanya, Anda perlu mengulangi penelusuran menggunakan offset atau kursor, seperti yang dijelaskan di bawah ini.
Dokumen yang diberi skor
Hasil penelusuran akan menyertakan daftar ScoredDocuments
yang cocok dengan kueri. Anda dapat melakukan iterasi pada daftar tersebut untuk memproses setiap dokumen satu per satu:
Secara default, dokumen yang diberi skor berisi semua kolom dokumen asli yang diindeks. Jika opsi kueri Anda menentukan returned_fields
, hanya kolom tersebut yang akan muncul di properti fields pada dokumen. Jika Anda membuat kolom komputasi dengan menentukan returned_expressions
atau snippeted_fields
, kolom tersebut akan muncul secara terpisah di properti ekspresi dokumen.
Menggunakan offset
Jika penelusuran Anda menghasilkan lebih banyak dokumen daripada yang dapat dikembalikan sekaligus, gunakan offset untuk mengindeks ke dalam daftar dokumen yang cocok. Misalnya, batas kueri default adalah 20 dokumen. Setelah Anda menjalankan pencarian untuk pertama kalinya (dengan offset 0) dan mengambil 20 dokumen pertama, ambil 20 dokumen berikutnya dengan mengatur offset menjadi 20 dan jalankan kembali pencarian yang sama. Terus ulangi penelusuran, dengan menambah offset setiap kali dengan jumlah dokumen yang ditampilkan:
Offset bisa menjadi tidak efisien saat melakukan iterasi pada kumpulan hasil yang sangat besar.
Menggunakan kursor
Anda juga dapat menggunakan kursor untuk mengambil subrentang hasil. Kursor berguna ketika Anda bermaksud untuk mempresentasikan hasil penelusuran di halaman yang berurutan dan ingin memastikan Anda tidak melewatkan dokumen apa pun jika indeks dapat dimodifikasi di antara kueri. Kursor juga lebih efisien saat melakukan iterasi pada kumpulan hasil yang sangat besar.
Untuk menggunakan kursor, Anda harus membuat kursor awal dan menyertakannya dalam opsi kueri. Ada dua jenis kursor, per kueri dan per hasil. Kursor per kueri menyebabkan kursor terpisah dikaitkan dengan objek hasil yang ditampilkan oleh panggilan penelusuran. Kursor per hasil menyebabkan kursor dikaitkan dengan setiap dokumen yang diberi skor dalam hasil.
Menggunakan kursor per kueri
Secara default, kursor yang baru dibuat adalah kursor per kueri. Kursor ini menyimpan posisi dokumen terakhir yang ditampilkan di hasil penelusuran. Data ini diperbarui dengan setiap penelusuran. Untuk menghitung semua dokumen yang cocok dalam indeks, jalankan penelusuran yang sama hingga hasilnya menampilkan kursor null:
Menggunakan kursor per hasil
Untuk membuat kursor per hasil, Anda harus menetapkan properti kursor per_result ke true (benar) saat membuat kursor awal. Saat penelusuran ditampilkan, setiap dokumen akan memiliki kursor yang terkait dengannya. Anda dapat menggunakan kursor tersebut untuk menentukan penelusuran baru dengan hasil yang dimulai dengan dokumen tertentu. Perhatikan bahwa saat Anda meneruskan kursor per hasil ke penelusuran, tidak akan ada kursor per kueri yang dikaitkan dengan hasil itu sendiri; result.getCursor() akan menampilkan null sehingga Anda tidak bisa menggunakannya untuk menguji apakah Anda telah mengambil semua kecocokan.
Menyimpan dan memulihkan kursor
Kursor dapat diserialisasi sebagai string yang aman bagi web, disimpan, lalu dipulihkan untuk digunakan nanti: