Inti dari Lucene adalah mengindex dan mencari teks. Dalam kacamata Lucene semua dipandang sebagai teks, yang ada dalam dokumen–apa saja. Lucene menggunakan logika: “kata ada dalam dokumen apa saja” bukan “dalam dokumen ada kata apa”. Untuk mempercepat pencarian kata-kata itu kemudian diindeks.

Meng-index

Untuk melakukan index, kita membutuhkan kelas-kelas berikut ini:

  • IndexWriter
  •  Directory
  • Analyzer
  • Document
  • Field

Ok. Kita bahas satu persetu

IndexWriter

IndexWriter adalah entry-point untuk mengindex. IndexWriter bisa kita bayangkan sebagai object yang memberi kita akses kedalam index. Sesuai dengan namanya, tentu saja hanya akses write (menulis), bukan akses read (membaca) index. Apa saja yang di-write? Index baru dan menambah dokumen ke dalam index yang sudah ada.

Directory

Directory adalah lokasi tempat index. Ada dua macam lokasi, file (seperti contoh sebelumnya) dan memory. Masing-masing merujuk pada kelas FSDirectory (untuk file) dan RAMDirectory (untuk memory). Tentu saja memory jauh lebih cepat dari file. Masing-masing punya tempatnya sendiri. Saya tidak akan bahas disini.

Analyzer

Sesuai dengan namanya analyzer digunakan untuk menganalisa input yang akan diindex. Jika bukan teks analyzer akan mengubahnya menjadi teks. Selain itu ia juga yang bertugas menghilangkan kata-kata yang tidak perlu (stop words-a, in, the, dll), membuat menjadi lower-case semua dan lain-lain. Jadi sebelum diindeks, inputan akan dianalisa, sesuai dengan strategi analisa yang digunakan.

Document

Dokumen bisa kita pandang sebagai proxy dari dokumen sesungguhnya, file MS Word misalnya. Disini dokumen berisi field-field terindex. Penulis, judul, tanggal dimodifikasi dan lain-lain masing-masing diindeks secara terpisah dan ditempatkan sebagai bagian dari dokumen.

Field

Dokumen berisi satu atau lebih field. Field adalah pasangan Key dan Value. Disinilah nantinya kita akan mencari teks. Kira-kira perintahnya seperti ini: cari x dalam field y. Ada 4 macam field dalam Lucene:

  1.  Keyword, tidak dianalisa, tapi langsung diindeks. Field tipe ini digunakan untuk menyimpan/mengindeks kata atau kalimat secara keseluruhan (tidak diambil token-nya). Sepeti misalnya, path file, nama orang, nama organisasi, tanggal,  dll (yang terdaridari banyak kata).
  2. UnIndexed, field jenis ini tidak di analisa dan juga tidak diindeks. Field ini digunakan untuk keperluan mendisplay hasil pencarian. Contoh, primary-key, url, dll.
  3. UnStored, kebalikan dari UnIndexed, field ini diindex dan dianalisa, tetapi tidak disimpan. Berguna untuk mengindex data yang besar, misalnya body dari file html atau dokumen besar lainnya.
  4. Text, dianalisa dan diindeks. Disimpan atau tidaknya field jenis ini tergantung pada darimana datangnya teks. Kalau dari string dia akan disimpan, tetapi jika dari reader dia tidak disimpan.

Kayaknya terlalu panjang deh, untuk search saya akan buat dalam post selanjutnya. Tolong dilihat kembali tulisan-tulisan yang berisi contoh-contoh sebelumnya agar lebih ngerti.

Iklan