Mencari data di database MySQL biasanya dilakukan dengan menggunakan nama field diikuti dengan nilai yang dicari, seperti field="Data Yang Dicari"
. Alternatifnya, kita juga bisa menggunakan LIKE
jika hanya ingin mencari sebagian data. Namun, bagaimana jika kita ingin mencari data seperti “Ibu Ayah” tetapi data yang ada di database ternyata “Ayah Ibu”? Menggunakan operator =
atau LIKE
tidak akan menemukan data tersebut. Untuk itu, kita membutuhkan solusi yang lebih canggih, seperti yang digunakan oleh Google untuk menampilkan hasil pencarian meskipun urutan katanya berbeda. Solusinya adalah menggunakan fitur full-text search di MySQL.
Daftar Isi
Apa Itu Full-Text Search?
Full-text search adalah fitur di MySQL yang memungkinkan kita untuk melakukan pencarian teks dalam kolom yang mendukung tipe data teks, seperti CHAR
, VARCHAR
, atau TEXT
. Fitur ini memberikan kemampuan pencarian yang lebih fleksibel dan akurat dibandingkan dengan menggunakan LIKE
.
Mengapa Menggunakan Full-Text Search?
Full-text search memberikan beberapa keuntungan, antara lain:
- Pencarian Lebih Akurat: Full-text search memungkinkan pencarian kata kunci dalam berbagai bentuk dan urutan.
- Pencarian Lebih Cepat: Dibandingkan dengan
LIKE
, full-text search lebih cepat dan efisien karena menggunakan indeks khusus. - Pencarian Fleksibel: Full-text search mendukung berbagai operator pencarian yang memungkinkan pencarian lebih kompleks.
Mengaktifkan Full-Text Search
Untuk mengaktifkan full-text search di MySQL, kamu perlu memastikan bahwa kolom yang ingin kamu cari memiliki indeks full-text. Berikut adalah langkah-langkah untuk membuat indeks full-text dan melakukan pencarian menggunakan full-text search.
1. Membuat Tabel dengan Indeks Full-Text:
CREATE TABLE produk (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_produk VARCHAR(255),
deskripsi TEXT,
FULLTEXT(nama_produk, deskripsi)
);
Pada contoh di atas, kita membuat tabel produk
dengan kolom nama_produk
dan deskripsi
, serta menambahkan indeks full-text pada kedua kolom tersebut.
2. Menambahkan Data ke Tabel:
INSERT INTO produk (nama_produk, deskripsi) VALUES
('Ibu Ayah', 'Ini adalah deskripsi Ibu Ayah'),
('Ayah Ibu', 'Deskripsi ini tentang Ayah Ibu'),
('Ayah', 'Deskripsi ini tentang Ayah'),
('Ibu', 'Deskripsi ini tentang Ibu'),
('Nenek', 'Deskripsi ini tentang Nenek');
3. Menggunakan Full-Text Search:
Setelah memiliki data seperti di atas, kita akan melakukan kueri untuk mendapatkan data yang berhubungan dengan keyword “Ayah dan Ibu” yang dimasukkan.
SELECT * FROM produk
WHERE MATCH(nama_produk, deskripsi) AGAINST ('Ayah dan Ibu');
Pada query di atas, kita menggunakan MATCH()
dan AGAINST()
untuk mencari data yang mengandung kata “Ayah dan Ibu” di kolom nama_produk
dan deskripsi
.
Hasilnya apa saja yang berkaitan dengan Ayah ataupun Ibu akan dimunculkan.
Operator Full-Text Search
MySQL full-text search mendukung berbagai operator yang memungkinkan pencarian lebih kompleks. Beberapa di antaranya adalah:
1. Boolean Mode:
Boolean mode memungkinkan kita untuk menggunakan operator seperti +
, -
, >
, <
, ()
dan *
. Contohnya:
SELECT * FROM produk
WHERE MATCH(nama_produk, deskripsi) AGAINST ('"Ayah Ibu"' IN BOOLEAN MODE);
Pada query ini, tanda kutip ganda digunakan untuk mencari frasa yang persis sama. Jika kamu ingin mencari kata yang wajib ada, gunakan tanda +
. Misalnya:
SELECT * FROM produk
WHERE MATCH(nama_produk, deskripsi) AGAINST ('+Ayah +Ibu' IN BOOLEAN MODE);
Dari kueri di atas maka data yang dihasilkan harus memiliki kata Ayah dan Ibu. Maka yang muncul hanya 2 data di atas saja.
2. Natural Language Mode:
Mode ini adalah default mode yang digunakan oleh MySQL. Jika kamu tidak menggunakan operator apapun maka defaultnya adalah menggunakan Natural Language Mode. Mau ditulis atau tidak hasilnya akan sama. Contohnya seperti yang kita sudah lakukan di atas pertama kali.
SELECT * FROM produk
WHERE MATCH(nama_produk, deskripsi) AGAINST ('Ayah Ibu' IN NATURAL LANGUAGE MODE);
SELECT * FROM produk
WHERE MATCH(nama_produk, deskripsi) AGAINST ('Ayah Ibu');
3. Query Expansion:
Query expansion memungkinkan MySQL untuk menambahkan kata-kata yang relevan ke dalam pencarian. Contohnya:
SELECT * FROM produk
WHERE MATCH(nama_produk, deskripsi) AGAINST ('Ayah Ibu' WITH QUERY EXPANSION);
Hasil kueri diatas akan menghasilkan semua data yang saling relevan. Mengapa data nama_produk “Nenek” juga muncul? Prosesnya seperti ini setelah data keyword utama sudah dimunculkan (yang dibold hijau), maka kueri akan bekerja lagi untuk mencari data yang relevan dari hasil yang di dapat di awal. Value yang di bold hijau rata-rata memiliki kata yaitu “Deskripsi ini tentang” (yang dibold kuning), karena deskripsi “Nenek” mengandung kata-kata tersebut maka dianggap relevan. Maka data tersebut ditampilkan juga.
Baca juga: Apa Itu Teknologi MERN Stack?
Kesimpulan
Menggunakan full-text search di MySQL memberikan fleksibilitas dan akurasi yang lebih baik dalam melakukan pencarian teks. Dengan fitur ini, kamu bisa melakukan pencarian yang lebih mirip dengan Google Search, di mana urutan kata tidak terlalu menjadi masalah. Untuk memulai, kamu hanya perlu memastikan bahwa kolom yang ingin dicari memiliki indeks full-text dan menggunakan query MATCH()
dan AGAINST()
dalam pencarian.
Dengan memahami dan memanfaatkan fitur-fitur canggih di MySQL, pencarian data dalam database bisa menjadi lebih efektif dan efisien. Jadi, jangan ragu untuk mencoba full-text search dalam project kamu berikutnya. Selamat mencoba dan semoga berhasil!