Tag Archives: Pagination

Lucene Search Result Pagination

Setelah sekian lama akhirnya saya bisa kembali menulis blog 😀 Kali ini saya akan menuliskan tentang Lucene pagination. Bagi Anda yang belum tahu apa itu Lucene, secara singkat Lucene adalah framework untuk indexing dan pencarian text yang ditulis dengan bahasa Java. Nah dalam pencarian pasti ada hasil pencarian banyak, nah kalau ditampilkan semua kan tidak enak dilihatnya. Oleh karena itu dibuat pagination/ per halaman. Setiap halaman hanya menampilkan beberapa hasil pencarian, misalkan hanya 10 hasil pencarian per halaman.

Okay, langsung saja ke algoritma/ idenya bagaimana membuat pagination. Pertama yang harus kita tahu adalah jumlah hasil pencarian, dari hasil pencarian ini kita bisa dapat jumlah halaman, kemudian menampilkan di tiap halamannya. Sederhana bukan?? Perhatikan kode program berikut.

<%
 String q = request.getParameter("query");
 try {
 Searcher searcher = Searcher.getInstance();
 searcher.setKeyword(q);
 ArrayList<Data> result = searcher.doSearch();

 if (result == null) {
 out.println("Tidak ada hasil untuk <strong>" + q + "</strong>");
 } else {
 int pageCount = result.size() / 10;
 if (result.size() % 10 != 0) {
 pageCount += 1;
 }

 int startidx;
 if (request.getParameter("start") != null) {
 startidx = Integer.parseInt(request.getParameter("start"));
 } else {
 startidx = 0;
 }

 int endidx;
 if ((startidx + 10) < result.size()) {
 endidx = startidx + 10;
 } else {
 endidx = result.size();
 }

 for (int idx = startidx; idx < endidx; idx++) {
 Data data = null;
 data = (Data) result.get(idx);
 out.println((idx + 1) + " - " + data.getJudul());
 out.println("<br/>");
 }

 out.println("<br/><hr/>");

 if (startidx > 0) {
 out.print("<a  href ='hasil.jsp?query=" + q + "&start=" + (startidx - 10) + "'> < prev </a>");
 }
 for (int idx = 0; idx < pageCount; idx++) {
 if (startidx / 10 == idx) {
 out.print("<strong>" + (idx + 1) + "</strong>");
 } else {
 out.print("<a  href ='hasil.jsp?query=" + q + "&start=" + (10 * idx) + "'>" + (idx + 1) + "</a>");
 }

 out.print(" ");
 }
 if (((startidx + 10) / 10) < pageCount) {
 out.print("<a  href ='hasil.jsp?query=" + q + "&start=" + (startidx + 10) + "'> next > </a>");
 }

 }
 } catch (Exception e) {
 out.println(e.getClass());
 }
 %>

Kode program di atas adalah penggalan dari halaman JSP dengan nama hasil.jsp. Selamat mencoba 🙂