Selasa, 28 Oktober 2008

FULL TEXT SEARCH

Salah satu hal penting dalam database adalah proses pencarian (search). Terutama jika Anda telah bekerja dengan database berukuran besar dan sering membutuhkan informasi tertentu di dalamnya.Joko Nurjadi

APAKAH DATABASE yang memiliki kapasitas terbesar yang pernah Anda ketahui? Apakah database milik perusahaan Anda, database website jaringan sosial, ataukah database game online? Atau bagaimana dengan database sebuah Internet search engine?

Singkat kata, tentunya database dengan ukuran luar biasa besar sudah bukan merupakan hal yang luar biasa lagi.

Karena itu, mungkin Anda pernah merasa takjub saat menyadari kemampuan pencarian sebuah program atau website tertentu, yang mampu menelusuri database yang besar dan menampilkan hasil pencarian dalam tempo yang relatif singkat.

Contohnya saja pada Internet search engine, proses pencarian keyword yang Anda ketikkan mungkin hanya memakan waktu hitungan detik, sementara Anda bahkan sukar membayangkan betapa banyaknya data yang harus dicari oleh search engine.

Semua itu dimungkinkan karena optimasi pemrograman database, khususnya dalam hal pencarian record. Salah satu komponen pencarian yang dapat bekerja secara mengagumkan adalah Full Text Search.

Full text search tidak hanya membantu dalam hal kecepatan, tetapi juga . eksibilitas dan ruang lingkup pencarian yang mengagumkan.

Ilustrasi Pencarian

Bayangkan Anda memiliki sebuah database yang memiliki ratusan tabel, pada masing-masing table memiliki ratusan field, di mana record pada table tersebut mencapai ribuan atau bahkan jutaan record.

Kemudian Anda menyediakan sebuah fitur pencarian yang mengizinkan pengguna memasukkan keyword yang diinginkan (contohnya seperti pada search engine), program harus dapat mencari dan menampilkan record yang mengandung keyword tersebut.

Tantangannya adalah bagaimana agar program dapat menampilkan hasil dengan cepat dan luas sehingga membuat pengguna awam mengira sebuah database hanyalah sebuah file berukuran beberapa kilobyte?

Solusinya bukan dengan mengganti komputer pengguna dengan sebuah superkomputer, tetapi dengan mengimplementasikan Full Text Search yang bekerja berdasarkan index.

Kita akan melihat terlebih dahulu ilustrasi pencarian dengan menggunakan metode pencarian berdasarkan karakter, yang umumnya menggunakan perintah SELECT diikuti dengan nama field, nama table, dan kondisi LIKE.

Katakanlah Anda memiliki table sederhana bernama Produk dengan field dan record seperti pada tabel 1.

Misalnya untuk mencari kata “Diskon” pada field Keterangan, sintaksnya secara umum adalah SELECT Keterangan FROM Produk WHERE Keterangan LIKE ‘%Diskon%’.

Metode ini lebih umum dikenal programer dan database administrator, yang memang efektif untuk pencarian sederhana atau di dalam kapasitas database yang relatif kecil.

Tetapi di dalam database yang besar dan kompleks, permasalahannya adalah sering kali pencarian tidak hanya dilakukan pada satu field.

Contohnya kata “Diskon” yang dimasukkan sebagai keyword tadi bisa saja dimaksudkan untuk mencari informasi pada field Jenis, sehingga seharusnya juga mencari pada field tersebut. Semakin banyak field yang dimasukkan dalam pencarian, akan semakin kompleks query yang harus dibuat, kerumitan akan bertambah berkali-kali lipat jika pencarian meluas meliputi tabel-tabel yang lain.

Ditambah lagi pencarian yang membutuhkan dua kata yang terpisah, akan membuat query yang menggunakan perintah LIKE menjadi semakin kompleks, misalnya jika keyword Anda adalah “Piring Emas”, maka program harus dapat menampilkan hasil pencarian “Piring berlapis emas” yang terdapat pada field Keterangan.

Jelaslah bahwa metode pencarian berdasarkan karakter dengan perintah LIKE bukanlah solusi yang tepat untuk database yang besar, memerlukan pencarian yang cepat dan luas di mana fungsi cari adalah salah satu fitur utama yang sering digunakan.

Sekarang kita akan melihat ilustrasi dengan menggunakan metode full text search.

Telah disebutkan bahwa bisa jadi field yang dicari tidak hanya satu foeld, tetapi yang pasti juga tidak semua field perlu dicari.

Kembali pada contoh table, di mana table Produk memiliki field Kode, Jenis, dan Keterangan. Terlebih dahulu kita harus mendefinisikan field apa saja yang termasuk di dalam pencarian.

Kita berasumsi field Kode tidak akan memberikan informasi yang dibutuhkan oleh pengguna, karena itu kita menentukan field yang termasuk dalam pencarian adalah field Jenis dan Keterangan. Selanjutnya untuk mempercepat pencarian, kita akan melakukan index pada field-field yang termasuk dalam pencarian. Hal inilah yang mempercepat proses pencarian karena data telah ter-index.

Karena itu, kita harus memodifikasi struktur tabel di atas agar memiliki index yang kita inginkan, database yang mendukung full text search tentunya telah menyediakan fasilitas untuk keperluan tersebut.

Sebagai contoh, untuk menambahkan index untuk keperluan full text search pada field Jenis dan Keterangan pada table Produk, sintaksnya adalah ALTER TABLE Produk ADD FULLTEXT(Jenis, Keterangan). FULLTEXT merupakan perintah untuk mende. nisikan index field, untuk mulai mencari data, gunakan query sebagai berikut: SELECT Jenis,Keterangan FROM Product WHERE MATCH (Jenis, Keterangan) AGAINST (‘Diskon’);

Contoh-contoh perintah diatas mengambil contoh sintaks pada MySQL, masing-masing database mungkin berbeda perintah ataupun cara melakukan index, tetapi memiliki konsep yang sama.

Cukup mudah, bukan? Lalu, apakah Anda harus mengganti metode pencarian pada seluruh aplikasi database Anda menjadi full text search?

Tentunya disesuaikan dengan kebutuhan dan karakteristik full text search itu sendiri. Karakteristik dasar yang penting dari full text search adalah:

  1. Full text search ideal digunakan untuk database berukuran besar yang mengandung ribuan atau bahkan jutaan record. Hasilnya dapat diurutkan (ranking) berdasarkan relevansi, yang direpresentasikan oleh angka desimal.

  1. Full text search akan mengabaikan kata yang terlalu umum (noise words/stop words) dan tidak dibutuhkan dalam pencarian, karena itu akan dihapus dari query. Misalnya kata “and”, “as”. Hal ini dimaksudkan untuk mendapatkan hasil yang lebih akurat.

  1. Full text search dapat dilakukan pada mode boolean, yang mencari berdasarkan kriteria AND atau OR. Misalnya pada keyword pencarian “+Komputer +Mouse”, maka akan mengembalikan record yang mengandung kata “Komputer” dan “Mouse”.

  1. Keyword adalah case-insensitive. Artinya, huruf besar dan kecil dianggap sama. “MoBiL” sama dengan “MOBIL” ataupun “mobil”.

Dengan karakteristik-karakteristik dasar di atas, full text search dapat bekerja dengan cepat dan efektif.

Walaupun pada dasarnya metode full text search hanya terdiri atas dua fungsi utama, yaitu index dan pencarian, tetapi terdapat cukup banyak aspek yang dapat dikembangkan agar performa full text search semakin baik lagi.

Pengembangan fitur-fitur pencarian juga dapat membuat proses pencarian menjadi lebih mudah, misalnya pada Google, Google dapat menyarankan kata yang benar saat Anda salah mengetikkan keyword.

Contohnya jika Anda mengetikkan kata “sopisticate” pada search engine seperti Google atau Yahoo!, maka search engine tetap mencari kata “sopisticate”, dan juga menyertakan pesan “Did you mean: sophisticate” sebagai kata yang lebih umum. Hal ini sangat membantu jika Anda salah mengetik ataupun salah mengeja suatu kata.

Walaupun pada umumnya hanya terdapat satu kotak search untuk pengguna mengetikkan keyword pada search engine, tetapi sering kali search engine menambahkan fungsi advanced search yang memungkinkan pengguna memberikan criteria pencarian yang lain.

Advanced search pada Google memungkinkan Anda menentukan keyword dan kemudian melakukan pengaturan lebih lanjut, misalnya apakah ingin menambahkan keyword yang tidak ingin dimasukkan dalam pencarian, atau pencarian dilakukan dalam ruang lingkup domain tertentu, dan masih banyak lagi.

Full Text Search pada Microsoft SQLServer

Metode full text search sudah cukup umum digunakan oleh software database popular, seperti Microsoft SQL Server, MySQL, Interbase, dan lain-lain. Cara kerjanya secara prinsip tidak berbeda, hanya implementasi teknikalnya saja yang berbeda di mana tiap-tiap software mengembangkan perintah/. tur sendiri.

Microsoft SQL Server 2000 sebagai salah satu software RDBMS populer, menyertakan full text search sebagai komponen yang diaktifkan melalui sebuah service/engine, yaitu Microsoft Search.

Kemampuan Microsoft Search juga dapat digunakan untuk Microsoft Exchange dan SharePoint.

Microsoft Search berfungsi untuk menciptakan index, menjalankan query, dan mengembalikan hasilnya berikut dengan informasi ranking pada service SQL Server.

Pada Microsoft SQL 2005, Microsoft Search digantikan oleh Microsoft Full-Text Engine for SQL Server (MSFTESQL). Langkah-langkah kon. gurasi untuk mende. nisikan field yang di index, menciptakan katalog, dapat dilakukan melalui GUI ataupun dengan mengetikkan perintah SQL.

Setelah semua terkon. gurasi dengan benar, Anda dapat menjalankan query yang memanfaatkan full text search tersebut, salah satu contoh query sederhana pada Microsoft SQL Server adalah sebagai berikut: SELECT * FROM Produk CONTAINS (Keterangan, “Diskon”) Mudah dimengerti pada contoh query bahwa inti pencarian adalah pada perintah CONTAINS, disediakan empat perintah untuk pencarian full text search, yaitu FREETEXT, FREETEXTTABLE, CONTAINS, CONTAINSTABLE.

Full Text Search pada MySQL

MySQL merupakan salah satu software RDBMS yang sering digunakan dalam aplikasi web, karena itu sudah seharusnya MySQL menawarkan fungsi full text search yang dapat diandalkan. MySQL sendiri telah menambahkan dukungan full text search sejak versi 3.23.23.

Terdapat beberapa ketentuan untuk menggunakan full text search pada MySQL, antara lain:

  1. Hanya dapat digunakan pada table MyISAM.
  2. Full text index hanya dapat diciptakan untuk . eld bertipe Char, Varchar, atau Text.

Untuk menambahkan full text index pada field, digunakan perintah FULLTEXT, yang dapat dide. nisikan bersamaan pada saat penciptaan table dengan perintah CREATE TABLE, ataupun didefinisikan kemudian pada table yang telah tercipta dengan ALTER TABLE atau CREATE INDEX. Untuk query pencarian, digunakan perintah MATCH()... AGAINST sebagaimana contoh ilustrasi pencarian di atas.

Full text search pada MySQL juga mendukung query expansion, yang digunakan untuk memperluas pencarian. Contohnya jika pengguna mencari keyword “database”, bisa jadi informas yang dibutuhkan termasuk “MySQL”, “Oracle”, “DB2”, “RDBMS”, dan seterusnya yang berhubungan dengan keyword “database”.

Untuk menjalankan pencarian dengan query expansion, Anda harus menyertakan perintah QUERY EXPANSION, contoh penggunaannya adalah pada query sebagai berikut: SELECT * FROM Produk WHERE MATCH (Keterangan) AGAINST (‘database’ WITH QUERY EXPANSION);

Engine Pendukung Full Text Search

Tidak semua database mendukung kemampuan full text search, untuk itu alternatifnya adalah menggunakan engine/library 3rd party yang memberikan fasilitas full text search. Salah satu engine full text search adalah Sphinx, yang merupakan engine open source dan didesain untuk berintegrasi dengan database SQL dan bahasa scripting.

Library full text search lainnya yang popular adalah Lucene yang dibuat dengan Java. Website/aplikasi seperti CNET dan Liferay adalah contoh website yang menggunakan engine Lucene.

Aplikasi

Untuk penggunaan yang umum, full text search mudah diaplikasikan dan memiliki performa yang baik. Beberapa aplikasi/ website yang cocok untuk menerapkan full text search antara lain adalah:

  1. Internet Search Engine.

Sesuai dengan namanya, pencarian adalah segalanya didalam search engine. Tidak mengherankan banyak Internet search engine mengembangkan metode pencarian untuk memperoleh hasil yang lebih terarah.

Beberapa pengembangan pencarian yang dikenal misalnya phrase search, concordance search, proximity search, dan lain sebagainya.

  1. Situs Berita/Artikel.

Mungkin Anda memiliki website dengan database berisi arsip kumpulan artikel atau berita, dimana pengguna dapat mengetikkan keyword untuk mencari artikel atau berita yang diinginkan. Full text search akan sangat penting untuk keperluan ini, karena keyword akan menjadi sangat bervariasi dan tidak terbatas satu kata, di sini kemampuan full text search dapat dimanfaatkan dengan tepat.

Contoh kegunaan lainnya adalah . tur pencarian full text search mampu menelusuri tense, misalnya “run”, “ran”, “running” dalam Bahasa Inggris.

Tentunya, masih banyak aplikasi yang dapat dikembangkan dengan full text search, misalnya pencarian file, isi dokumen, kata-kata dalam kamus, dan sebagainya.

Akhir kata, semoga sekelumit pembahasan mengenai full text search ini dapat memperkaya pengetahuan, sehingga dapat diaplikasikan dengan baik.

LEBIH LANJUT

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

http://en.wikipedia.org/wiki/Full_text_search

http://www.devarticles.com/c/a/MySQL/Getting-Started-With-MySQLs-Full-Text-Search-Capabilities/