Lucene


Hmmm…ini nih bikin orang sumpek bin stres beberapa bulan,hampir aja jadi gila 😀 yah alhamdulilah masa-masa itu terlewati juga,trimakasih kepada smua pihak yang tlah membantu dalam penyusunan Tugas Akhir (TA) saya, maaf tidak bisa menyebutkan satu persatu hanya doa yang bisa saya panjatkan untuk kebaikan kawan-kawan smua, smoga Allah SWT membalas kebaikan walau sebesar biji dzarrah,Amin 🙂

Berawal dari kesulitan ketika mencari referensi about Lucene buat mengisi bab 2 buku TA, mbah google diubek-ubek  smpe elek kok ya gak nemu-nemu referensi bout lucene yang berbahasa Indonesia akhirnya dengan berat hati translate lah dari buku karangan orang besar,in english???of course lah…saya cukup tertatih-tatih menerjemahkan pemahaman yang ada di buku,minta bantuannya koreksi ya kawan-kawan klo ada yang gak sesuai terjemahan ma aslinya,maklum score toefl saya mepet bgt,harap maklum ya kawan-kawan 😀

Gambaran Umum Lucene

Semua orang mengalami masalah yang sama yaitu informasi yang berlebihan dengan menggunakan pendekatan yang berbeda-beda. Salah satu faktor kunci di balik  popularitas dan kesuksesan Lucene adalah kesederhanaannya. Lucene memiliki performa yang tinggi,  Information Retrieval (IR) library yang luas. Hal itu memudahkan untuk menambahkan kemampuan indexing dan searching pada aplikasi. Lucene adalah free, open-source project yang diimplementasikan pada java; merupakan member dari apache jakarta family project yang populer, dilisensikan dibawah Apache liberal software License. Dengan demikian, Lucene saat ini, dan telah selama beberapa tahun,merupakan free IR library java yang paling populer.

Lucene menyediakan core API yang mudah tetapi powerful, hanya memerlukan sedikit pemahaman mengenai full-text indexing dan searching, hanya perlu mempelajari class-class untuk memulai mengintegrasikan Lucene ke aplikasi.

Pengguna baru Lucene sering melakukan kesalahan menganggap sebagai sebuah aplikasi yang siap digunakan seperti program file-search, web crawler,atau website search engine. Itu bukan Lucene,Lucene adalah sebuah software library,sebuah toolkit, bukan fitur lengkap aplikasi pencarian. Hal ini berkaitan dengan text indexing dan searching, dan melakukan hal-hal itu dengan sangat baik. Lucene memungkinkan aplikasi berurusan dengan business rules yang khusus pada permasalahan domain ketika menyembunyikan kompleksitas implementasi indexing dan searching dengan penggunaan API yang mudah. Lucene dapat diilustrasikan sebagai layer aplikasi pada gambar dibawah ini :

Sebuah aplikasi umum terintegrasi dengan Lucene

Lucene dapat membuat index dan mencari semua data yang dapat dikonversi ke format textual.Lucene tidak mempedulikan sumber data,format,atau bahkan bahasa yang digunakan selama dapat dikonversi ke text. Lucene dapat digunakan untuk index dan mencari data yang tersimpan pada file : web page pada remote web server, dokumen yang tersimpan pada sistem file lokal, file text, dokumen microsoft word, file HTML atau PDF, atau semua format dimana dapat dikonversi ke informasi textual.

Dengan Lucene, dapat dengan mudah menambah kapabilitas indexing dan searching pada aplikasi :

1. Searchable email : sebuah aplikasi email dimana user dapat    mencari pesan diarsip dan menambahkan pesan baru ke index.

2. Online documentation search : sebuah pembaca   dokumen –CD-based,Web-based, atau tersembunyi didalam aplikasi– membiarkan user mencari dokumentasi online atau arsip publikasi.

3. Searchable Webpages : sebuah web browser atau proxy server dapat membangun sebuah search engine untuk mengindeks setiap web page yang telah dikunjungi user, memungkinkan user untuk dengan mudah mengunjungi kembali web page tersebut.

4. Website search : Suatu program CGI bisa membiarkan user mencari website anda.

5. Content search : sebuah aplikasi bisa membiarkan user mencari dokumen yang tersimpan secara spesifik,ini dapat diintegrasikan ke dalam Open Document dialog.

SEJARAH LUCENE

Lucene pada awalnya ditulis oleh Doug Cutting; pada awalnya tersedia untuk download dari situsnya SourceForge. Bergabung dengan Apache Software Foundation’s Jakarta family of high-quality open source Java products pada September 2001. Dengan setiap rilis sejak saat itu, proyek ini telah mengalami peningkatan visibilitas, menarik lebih banyak pengguna dan pengembang. Pada Juli 2004, Lucene versi 1.4 telah dirilis, dengan bug fix 1.4.2 dirilis pada awal Oktober, Tabel dibawah menunjukkan sejarah rilis Lucene.

Sejarah Rilis Lucene

INDEXING

Jantung dari semua search engine adalah konsep indexing yaitu melakukan proses pada data asli menjadi pencarian sangat efisien berdasarkan referensi silang untuk memfasilitasi rapid searching. Untuk mencari sejumlah besar text secara cepat, pertama harus membuat index text tersebut dan melakukan konversi ke format yang dapat membuat pencarian lebih cepat, mengeliminasi proses urutan scanning yang lambat. Proses konversi ini disebut indexing dan outputnya disebut index.

Index dapat dianggap sebagai struktur data yang memungkinkan akses random secara cepat pada kata-kata yang tersimpan di dalamnya. Konsep di balik itu adalah analog dengan index pada akhir dari sebuah buku, yang memungkinkan dengan cepat menemukan halaman yang membahas topik-topik tertentu. Dalam kasus Lucene, sebuah index adalah struktur data yang dirancang khusus, biasanya disimpan pada file sistem sebagai sekumpulan file index.

Class-class berikut merupakan prosedur yang digunakan untuk melakukan indexing :

1. IndexWriter

IndexWriter adalah komponen utama proses indexing. Class ini menciptakan index baru dan menambah dokumen index yang sudah ada. IndexWriter sebagai objek yang memberikan akses write ke index tapi tidak membiarkan user membaca atau mencari itu. Walaupun namanya IndexWriter tetapi bukan satu-satunya class yang digunakan untuk memodifikasi index.

2. Directory

Class Directory mewakili lokasi index Lucene. Merupakan class abstrak yang memungkinkan subclasses untuk menyimpan index yang cocok. Pada contoh indexer,  menggunakan path ke directory file sistem aktual untuk memperoleh turunan dari directory, yang diberikan ke IndexWriter constructor.

3. Analyzer

Text sebelum di index, melewati sebuah Analyzer. Analyzer ditentukan di constructor IndexWriter, yang berfungsi untuk ekstraksi token dari text yang akan di index dan menghilangkan sisanya.

4. Document

Sebuah dokumen mewakili sekumpulan field. Dapat dianggap sebagai dokumen virtual seperti web page, pesan email, atau file text yang akan dilihat kembali lain waktu. Meta-data seperti author, title, subject, tanggal dimodifikasi, dan sebagainya, di index dan disimpan secara terpisah sebagai field dokumen.

5. Field

Setiap dokumen dalam sebuah index berisi satu atau lebih field bernama, dituliskan dalam sebuah class yang disebut Field. Setiap field berhubungan dengan data yang diambil dari index selama pencarian. Lucene menawarkan 4 tipe field yang berbeda : Keyword, UnIndexed, UnStored, Text.

SEARCHING

Searching adalah proses mencari kata-kata dalam sebuah index untuk menemukan dokumen dimana dokumen-dokumen itu muncul. Kualitas pencarian biasanya dijelaskan dengan menggunakan matrik precision dan recall. Pengukuran recall menunjukkan seberapa baik sistem pencarian untuk menemukan dokumen yang relevan, sedangkan pengukuran precision menunjukkan seberapa baik sistem melakukan filter dengan dokumen yang tidak relevan. Namun, harus mempertimbangkan sejumlah faktor lain ketika berpikir tentang searching. Telah dijelaskan kecepatan dan kemampuan untuk dengan cepat mencari text dalam jumlah besar. Dukungan untuk query single dan multiterm, query phrase, wildcards, result ranking, dan sorting juga penting.

Class-class berikut digunakan untuk melakukan searching :

1. IndexSearcher

IndexSearcher digunakan untuk mencari apa yang IndexWriter indexing : pusat link ke index yang memaparkan beberapa metode pencarian. IndexSearcher dapat dianggap sebagai class yang membuka index dalam mode read-only.

2. Term

Sebuah Term adalah basic unit untuk searching. Serupa dengan Field object, terdiri dari sepasang element string : nama field dan value field. Term object juga terlibat dalam proses indexing. Namun,itu semua diciptakan oleh internal Lucene, sehingga tidak perlu memikirkan term sementara proses indexing.

3. Query

Lucene dilengkapi dengan sejumlah subclass Query antara lain TermQuery, BooleanQuery, PhraseQuery,PrefixQuery, PhrasePrefixQuery,RangeQuery, FilteredQuery, dan SpanQuery.

4. TermQuery

TermQuery adalah tipe query yang paling dasar didukung oleh Lucene, dan merupakan salah satu jenis query yang primitif. Ini digunakan untuk pencocokan dokumen yang terdapat field dengan value spesifik.

5. Hits

Class Hits adalah tampungan sederhana pointer untuk mengurutkan hasil pencarian dokumen yang cocok dengan query yang diberikan. Untuk alasan performa, Hits instances tidak mengambil dari index semua dokumen yang cocok dengan query, tetapi hanya sebagian kecil pada saat itu.

ARCHITECTURE ( PACKAGE )

org.apache.lucene

Merupakan Top-level package. Lucene’s package information, including version.

org.apache.lucene.analysis

Package analysis menyediakan mekanisme untuk mengkonversi String dan Reader ke dalam token-token yang dapat di index oleh Lucene. Ada tiga class utama dalam package :

Analyzer : Sebuah Analyzer bertanggung jawab untuk   membangun TokenStream yang dapat digunakan oleh proses indexing dan searching.

Tokenizer : Sebuah Tokenizer adalah TokenStream dan bertanggung jawab untuk memecah text yang masuk ke dalam token. Dalam kebanyakan kasus, sebuah analyzer akan menggunakan Tokenizer sebagai langkah pertama dalam proses analisis.

TokenFilter : Sebuah TokenFilter juga merupakan TokenStream dan bertanggung jawab untuk memodifikasi token yang telah diciptakan oleh tokenizer. Modifikasi umum yang dilakukan oleh TokenFilter adalah deletion, stemming, synonym injection, dan down casing. Tidak semua analyzer memerlukan TokenFilter.

org.apache.lucene.analysis.standard

Grammar yang cepat berbasis tokenizer dibangun dengan JFlex. Memiliki 3 class utama :

StandardAnalyzer : Filter StandardTokenizer dengan StandardFilter, LowerCaseFilter dan StopFilter, menggunakan daftar stop words bahasa inggris.

StandardFilter : Normalisasi token yang diekstrasi dengan StandardTokenizer.

StandardTokenizer : Grammar berbasis tokenizer dibangun dengan JFlex. Hal ini menjadi tokenizer yang baik untuk dokumen bahasa Eropa pada umumnya :

– Memecah kata-kata pada karakter tanda baca, menghapus tanda baca. Namun, sebuah tanda titik yang tidak diikuti oleh spasi dianggap sebagai bagian dari token.

– Memecah kata di tanda hubung, kecuali jika ada nomor dalam token, dalam hal ini seluruh token ditafsirkan sebagai nomor produk dan tidak terpecah.

– Mengenali alamat email dan hostname internet sebagai satu token.

org.apache.lucene.document

Representasi logic dari Dokumen untuk indexing dan searching. Package Dokumen menyediakan representasi logic untuk level user dari content yang akan di-index dan dicari. Package juga menyediakan utilitas untuk bekerja dengan Dokumen dan Field. Sebuah Dokumen adalah kumpulan field. Sebuah field adalah representasi logis content user yang akan di-index atau disimpan. Field memiliki sejumlah properti yang akan menunjukkan pada Lucene bagaimana memperlakukan Content (indexed, tokenized, stored,dll).

org.apache.lucene.index

Code untuk maintain dan akses index. Memiliki banyak class,salah satunya class IndexWritter yang digunakan untuk membuat index dan melakukan maintain pada index.

org.apache.lucene.queryParser

Query parser sederhana diimplementasikan dengan JavaCC. Class utama yang digunakan adalah Class QueryParser, Class ini dihasilkan oleh JavaCC. Method yang paling penting adalah parse(String). Sintaks untuk query string adalah sebagai berikut : Sebuah query adalah serangkaian klausa. Sebuah klausa dapat diawali dengan :

– Tanda plus (+) atau minus (-), yang menunjukkan bahwa klausa diperlukan atau masing-masing tidak diperbolehkan, atau

– Term yang diikuti oleh tanda titik-dua, yang menunjukkan field yang dicari. Hal ini memungkinkan untuk membuat beberapa query pencarian field.

Sebuah klausa dapat berupa :

– Term, menunjukkan semua dokumen yang berisi term ini, atau

– Nested query (query bersarang), tertutup dalam tanda kurung. Catatan : bahwa ini dapat digunakan dengan awalan +/- untuk meminta apapun dari serangkaian term.

Grammar query adalah :

Query  ::= ( Clause )*

Clause ::= [“+”, “-“][<TERM> “:”](<TERM> | “(” Query “)” )

org.apache.lucene.search

Package yang digunakan untuk mencari pada index. Aplikasi biasanya memanggil Searcher.search(Query) atau Searcher.search(Query,Filter).

Class Query : TermQuery

Dari berbagai implementasi Query, TermQuery adalah yang paling mudah untuk dipahami dan yang paling sering digunakan dalam aplikasi. Sebuah TermQuery mencocokkan semua dokumen yang berisi term tertentu, yang merupakan kata yang terdapat di field tertentu. Dengan demikian, TermQuery mengidentifikasi dan memberi score semua dokumen yang memiliki field dengan string tertentu didalamnya. Membuat TermQuery sesederhana seperti :

TermQuery tq = new TermQuery(new Term("fieldName","term"));

Pada contoh tersebut, Query mengidentifikasi semua dokumen yang memiliki field yang bernama “fieldName” yang terdapat kata “term”

Semoga bermanfaat kawan,untuk info lebih lanjut silahkan baca buku ini…CMIIW yak 🙂

19 thoughts on “Lucene

  1. siez says:

    hai..aku mw nnya donk..

    program aplikasi lucene itu bsa di download dmna yaa??

    aku udah dapet cma agak bgg karena katanya masih butuh apache ato ant’s gitu..akku kurang ngerti..

    >.<

    bsa bantuin aku gak??thx before

    salam kenal yaa..^^

  2. greywarden says:

    eh aq mau buat search engine buat dokumen pake lucene nih, tapi dokumen nya bahasa indonesia, bisa kasih saran buat bikin analyzer nya???

  3. wiwiksuharso says:

    lucene, tantangan baru
    boleh gak diberikan reference yang lebih banyak, agar saya bisa mencoba dan mengimplementasikannya.
    sekarang, rada bingung.
    kalo boleh ke email ini ya, trim

  4. irul says:

    Halo, mau tanya dong kak..

    lucene itu kan juga bisa buat proses stemming bahasa Indonesia yah.. menurut kamu hasil stemming lucene itu sudah pas belum ya? thx

  5. zeta says:

    Assalamualaikum mba olga
    perkenalkan saya zeta. saya dari jurusan matematika ITS mba. saya sekarang sedang mengerjakan tugas akhir tapi saya mendapati masalah tentang lucene. saya ingin belajar lebih tentang lucene, saya sudah meng email mba olga di ceria_ols@yahoo.com

    terima kasih mba

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s