Last Updated on 11 years by Mas Herdi
Hey all, tidak terasa sekarang kita sudah memasuki bulan Ramadhan ya 🙂 Bagi yang beragama Islam, saya ucapkan selamat menjalankan ibadah puasa, semoga bulan ini membawa berkah kepada kita semua.
Oke, kali ini saya akan mencoba berbagi tutorial tentang cara membuat search engine sederhana menggunakan Lucene. Bagi yang belum tau, Lucene adalah framework untuk search engine, information retrieval dan recommender system buatan Apache Software Foundation. Lucene terkenal dan banyak digunakan karena pengimplementasiannya yang sangat mudah, yang akan saya tunjukkan pada postingan kali ini.
Download Lucene
Pertama-tama, kalian harus men-download library Lucene terlebih dahulu. Bisa di-download pada link ini. Versi Lucene yang digunakan adalah Lucene versi 4.2.1.
Setelah itu, buatlah project Java baru pada Netbeans dengan nama package id.web.twoh.lucene.se. Supaya menjadi sebuah search engine sederhana, project itu harus menggunakan beberapa library Lucene yang penting. Setelah project baru selesai dibuat, impor library yang dibutuhkan, yaitu :
- lucene-core-4.2.1.jar, ini adalah library inti dari Lucene
- lucene-queryparser-4.2.1.jar, library yang berfungsi untuk mem-parsing query
- lucene-analyzers-common-4.2.1.jar, library yang berfungsi untuk melakukan fungsi-fungsi analisis pada search engine
Library tersebut bisa kalian temukan di dalam folder Lucene yang telah kalian download dari link di atas.
Code Craftmanship
Jika ke semua library sudah diimpor, maka sekarang kita akan menuliskan kode program-nya. Pada contoh ini, kita akan membuat sebuah program sederhana untuk mencari lowongan kerja berdasarkan kota. Cara kerjanya, kita memasukkan nama kota dan kemudian akan keluar hasil berupa lowongan pekerjaan yang ada pada kota tersebut. Sangat simpel bukan. 😉
Indexing
Untuk membuat sebuah mesin pencari, hal pertama yang harus kita lakukan adalah melakukan indexing terlebih dahulu terhadap data yang ada. Proses ini dilakukan pada file Index.java yang akan kita buat. Buatlah sebuah file .java dengan nama Index, dan copy paste kan kode berikut.
Index.java
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package id.web.twoh.lucene.se; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; /** * * @author Herdi Naufal */ public class Index { public Directory doIndexing() { StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_42); // Membuat index baru dalam bentuk RAMDirectory Directory index = new RAMDirectory(); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_42, analyzer); try { IndexWriter w = new IndexWriter(index, config); //Menambahkan dokumen yang di-index addDoc(w, "Semarang", "Lowongan Android Programmer"); addDoc(w, "Semarang", "Lowongan User Interface Desinger"); addDoc(w, "Bandung", "Dicari Developer Java"); addDoc(w, "Jakarta", "Dicari Web Designer"); addDoc(w, "Jakarta", "Lowongan Android UI Designer"); addDoc(w, "Jakarta", "Lowongan Developer Apple"); addDoc(w, "Jakarta", "Dicari Developer Dot Net"); addDoc(w, "Jakarta", "Dicari JSP Developer"); addDoc(w, "Bandung", "Lowongan Data Analis"); addDoc(w, "Bogor", "Lowongan Mobile Application Developer"); addDoc(w, "Bandung", "Dicari Developer PHP"); addDoc(w, "Tangerang", "Dicari Web Designer familiar dengan CodeIgniter"); addDoc(w, "Jogjakarta", "Lowongan Windows Phone Development"); addDoc(w, "Semarang", "Lowongan User Interface Desingner"); addDoc(w, "Bandung", "Dicari Developer Java Enterprise"); addDoc(w, "Bandung", "Dicari Master Java"); addDoc(w, "Surabaya", "Dicari Developer Cloud Application (Java)"); addDoc(w, "Semarang", "Dibutuhkan developer Linux "); w.close(); } catch (IOException ex) { Logger.getLogger(Index.class.getName()).log(Level.SEVERE, null, ex); } return index; } //method yang digunakan untuk menambahkan dokumen ke index private static void addDoc(IndexWriter w, String city, String job) throws IOException { Document doc = new Document(); doc.add(new TextField("title", city, Field.Store.YES)); doc.add(new StringField("isbn", job, Field.Store.YES)); w.addDocument(doc); } }
Searching
Setelah proses indexing, berikutnya kita akan melakukan proses searching. Proses ini bekerja dengan cara menggunakan query kota yang diinputkan oleh pengguna, yang kemudian akan dicocokkan dengan data lowongan pekerjaan yang ada di index. Buatlah file Search.java, dan copy pastekan kode berikut.
Search.java
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package id.web.twoh.lucene.se; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopScoreDocCollector; import org.apache.lucene.store.Directory; import org.apache.lucene.util.Version; /** * * @author Herdi Naufal */ public class Search { public void doSearching(String args) throws ParseException, IOException { Index indexing = new Index(); Directory index = indexing.doIndexing(); StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_42); String querystr = args; // "title" arg adalah data yang digunakan untuk pencarian // jika tidak ada data yang dispesifikasikan pada query Query q = new QueryParser(Version.LUCENE_42, "title", analyzer).parse(querystr); // Proses pencarian int hitsPerPage = 10; try (IndexReader reader = DirectoryReader.open(index)) { IndexSearcher searcher = new IndexSearcher(reader); TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true); searcher.search(q, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; // Menampilkan hasil pencarian System.out.println("Menemukan " + hits.length + " lowongan kerja di Semarang."); for(int i=0;i<hits.length;++i) { int docId = hits[i].doc; Document d = searcher.doc(docId); System.out.println((i + 1) + ". " + d.get("isbn") + "\t" + d.get("title")); } } } }
Main program
Setelah file yang berperan untuk indexing dan searching selesai dibuat, yang terakhir adalah membuat file utama yang berisi main program. Buatlah sebuah file .java bernama HelloLucene, file ini akan berfungsi sebagai tampilan utama program dimana pengguna bisa menginputkan nama kota, dan menjalankan proses searching dan juga indexing. Kodenya adalah seperti berikut.
HelloLucene.java
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package id.web.twoh.lucene.se; /** * * @author Herdi Naufal */ import java.io.IOException; import java.util.Scanner; import org.apache.lucene.queryparser.classic.ParseException; public class HelloLucene { public static void main(String[] args) throws IOException, ParseException { String kota; System.out.print("Masukkan nama kota: "); Scanner in = new Scanner(System.in); kota = in.nextLine(); Search search = new Search(); search.doSearching(kota); } }
DEMO
![Tampilan Awal Search Engine](http://twohengineering.files.wordpress.com/2013/07/p1.png?resize=478%2C193)
Tampilan Awal Search Engine
![](http://twohengineering.files.wordpress.com/2013/07/p2.png?resize=300%2C204)
Kita coba masukkan kota Semarang (kuthane dewe) 😀
![Hasil lowongan kerja di kota Semarang](http://twohengineering.files.wordpress.com/2013/07/p3.png?resize=405%2C200)
Hasil lowongan kerja di kota Semarang
Tentunya aplikasi ini masih sangat sederhana sekali, dan hanya untuk kepentingan demonstrasi Lucene saja. 🙂 Semua kembali kepada pembaca sekalian untuk mengembangkan tutorial ini ke aplikasi yang lebih kompleks.
mas klo membuat search engine di android dengan sumber dari class” java dan xml miliknya sendiri bagaimana mas?
Salam kenal mas, ini saya tambahkan contoh lain Lucene, semoga bermanfaat….
https://abdiansah.wordpress.com/2015/04/04/membuat-search-engine-lokal-menggunakan-lucene/
mas abdiansyah
salam kenal, punya tutorial yang jelas dan rinci egk untuk apache lucene
sy lagi membutuhkan tools untuk pengtesan pembobotan kata dalam thesis sy.
klau ada boleh minta,apa gimana soalnya sy btuh sekali
tks amril