Sal
Administrator
Seorang penulis yang suka belajar hal baru dan dunia fotografi
3 min read

Tutorial Membuat Search Engine Menggunakan Lucene dan XML

Posted in Lucene

Berikut ini adalah tutorial untuk membuat search engine dengan menggunakan library Apache Lucene. Project dibuat dengan menggunakan Netbeans dan Lucene versi 3.4.0 Tutorial ini adalah bagian dari tutorial membuat Search Engine Lucene. Langsung saja, untuk membuat search engine anda dapat mengikuti tutorial di bawah ini dengan mudah.

Tutorial Membuat Search Engine Menggunakan Lucene dan XML

Pertama buka Netbeans IDE anda, buat project baru dengan nama LuceneProject. Tambahkan Library Lucene  ke dalam project dengan cara: klik kanan folder Libraries di LuceneProject -> Add JAR/Folder. Masukkan library berikut:
lucene-core-3.4.0.jar lucene-core-3.4.0-javadoc.jar lucene-test-framework-3.4.0.jar lucene-test-framework-3.4.0-javadoc.jar
Jika anda menggunakan Lucene dengan versi yang berbeda, silakan menyesuaikan, dan kalau bingung, masukkan saja semua JAR nya #eh Setelah itu masukkan file XML ke dalam direktori root LuceneProject anda. Berikut ini adalah cuplikan dari file XML tersebut: DataSiswa.xml
<DATABASE NAME="ABSENSI2010">
<!-- SISWA siswa -->
<SISWA>
<NIS>
1001
</NIS>
<NAMA>
ADI DANUDIRJA
</NAMA>
<KELAS>
X - 1
</KELAS>
<ALAMAT>
Jl. Anggrek 37,Kel. ilir, Gunungsitoli, Nias, Sumatera Utara
</ALAMAT>
</SISWA>
Buatlah Form seperti gambar berikut: LuceneForm.java [caption id="" align="alignnone" width="255"]Membuat search engine dengan menggunakna Apache Lucene, Netbeans dan data XML Lucene Form[/caption] Untuk nama variabel dan elemen-elemen GUI dapat dilihat di gambar berikut. [caption id="" align="alignnone" width="224"]Lucene search engine GUI component Netbeans Java GUI Component[/caption] Selanjutnya, isikan code untuk ke-empat button tersebut:

Reset Button

Digunakan untuk mengosongkan Text Field dan Label ketika sedang terisi keyword dan hasil pencarian.
private void btnResetActionPerformed(java.awt.event.ActionEvent evt) {                                         
        txtSearch.setText("");
        Label.setText("");
}

Delete Index Button

Digunakan untuk menghapus direktori index.
private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {                                          
        DeleteDir deleteDir = new DeleteDir();
        deleteDir.deleteDir();
}
Untuk source code DeleteDir.java dapat dilihat di cara menghapus direktori dengan menggunakan Java

Index Button

Digunakan untuk melakukan indexing pertama kali
private void btnIndexActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Index index=new Index();
        index.run();
}
Untuk code di dalam file Index.java  silakan menuju ke tutorial berikut: Mengindex file XML dengan menggunakan Lucene

Search Button

Digunakan untuk melakukan pencarian dari data yang telah di index sebelumnya.
private void btnSearchActionPerformed(java.awt.event.ActionEvent evt) {                                          
        DataSearch(txtSearch.getText());
        run();
}
Method DataSearch()
public void DataSearch(String keywords) {
        this.keywords = keywords;
        if(searcher==null){
            try{
                indexDir = FSDirectory.open(new File("index"));
                searcher = new IndexSearcher(indexDir);
            }catch (IOException ex) {
                Label.setText(ex.getMessage());
            }
        }
    }
Method run() di file LuceneForm.java
public void run() {       
        TopDocs docs = search();
        String result = getResults(docs);
        Label.setText(result);       
}
Method TopDocs search()
private TopDocs search() {
        TopDocs resultDoc = null;
        try {
            MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_31,
                    new String[]{"NIS", "NAMA", "KELAS", "ALAMAT"},
                    new StandardAnalyzer(Version.LUCENE_31));
            Query query = parser.parse(keywords);
            resultDoc = searcher.search(query, 10);
        } catch (Exception ex) {
            Label.setText(ex.getMessage());
        } return resultDoc;
    }
Method getResult (TopDocs docs)
private String getResults(TopDocs docs) {
        StringBuilder htmlFormat = new StringBuilder();
        htmlFormat.append("<html><body>");
        htmlFormat.append("Ditemukan <b>" + docs.totalHits +"</b> dokumen <br>");
        for (ScoreDoc sd : docs.scoreDocs) {
            int docId = sd.doc;
            try {
                Document doc = searcher.doc(docId);
                htmlFormat.append("<hr>" + "score: " + sd.score
                    + "<br><b>Siswa</b>: " + doc.get("NAMA") +
                    "<br>");
                htmlFormat.append("<b>NIS</b>: " +
                    doc.get("NIS") + "<br>");
                htmlFormat.append("<b>Nama</b>: " +
                    doc.get("NAMA") + "<br>");
                htmlFormat.append("<b>Kelas</b>: " +
                    doc.get("KELAS") + "<br>");
                htmlFormat.append("<b>Alamat</b>: " +
                   doc.get("ALAMAT") + "<br>");
            } catch (IOException ex) {
                Label.setText(ex.getMessage());
            }
        }
        htmlFormat.append("</body></html>");
        return htmlFormat.toString();
}
Selamat mencoba.