philiplambok
6/27/2018 - 6:22 AM

Meningkatkan Performa Pencarian Text dengan Menggunakan Fulltext indexing

Meningkatkan Performa Pencarian Text dengan Menggunakan Fulltext indexing

Meningkatkan Pencarian Text dengan Menggunakan FULLTEXT indexing

Pencarian adalah salah satu fitur paling penting dalam sebuah proyek. Semakin baik hasil pencarian dalam sebuah website, maka akan meningkatkan pengalaman user dalam menggunakan website.

Tulisan ini akan diawali dengan memperlihatkan kelemahan dari query LIKE "%kata_kunci%" dan memperkenalkan solusinya atas masalahnya yaitu dengan fulltext indexing.

Sebelum itu mari kita membuat database dan mengisi datanya terlebih dahulu.

# membuat databse
create database tempdb;
use temodb;

# membuat table  
create table blogs (
  id bigint primary key auto_increment, 
  body text
);

# mengisi data 
insert blogs (body) values 
("Satu objek yaitu: PHP"), 
("Ada dua objek yaitu: PHP dan XAMPP"), 
("Ada tiga objek yaitu: PHP dan XAMPP dan MYSQL"), 
("ada empat objek yaitu: PHP dan XAMPP dan MYSQL dan LARAVEL"); 

Setelah kita membuat database, table dan mengisinya dengan data dummy, kita bisa melihatnya terlebih dahulu dengan perintah select * from blogs.

mysql> select * from blogs;
+----+------------------------------------------------------------+
| id | body                                                       |
+----+------------------------------------------------------------+
|  1 | Satu objek yaitu: PHP                                      |
|  2 | Ada dua objek yaitu: PHP dan XAMPP                         |
|  3 | Ada tiga objek yaitu: PHP dan XAMPP dan MYSQL              |
|  4 | ada empat objek yaitu: PHP dan XAMPP dan MYSQL dan LARAVEL |
+----+------------------------------------------------------------+
4 rows in set (0,00 sec)

Sekarang kita lihat penggunakan LIKE dalam melakukan pencarian.

mysql> select * from blogs where body LIKE "%php%";
+----+------------------------------------------------------------+
| id | body                                                       |
+----+------------------------------------------------------------+
|  1 | Satu objek yaitu: PHP                                      |
|  2 | Ada dua objek yaitu: PHP dan XAMPP                         |
|  3 | Ada tiga objek yaitu: PHP dan XAMPP dan MYSQL              |
|  4 | ada empat objek yaitu: PHP dan XAMPP dan MYSQL dan LARAVEL |
+----+------------------------------------------------------------+
4 rows in set (0,00 sec)

mysql> select * from blogs where body LIKE "%php xampp%";
Empty set (0,00 sec)

Kita lihat dari hasil query diatas, pada pencarian dengan format %php% menghasilkan 4 rows, namun ketika %php xampp% tidak menghasilkan apa-apa (0 rows) padahal seharusnya kita menginginkannya menghasilkan 4 rows juga.

Sekarang untuk solusinya, kita bisa menggunakan fulltext indexing.

# Menambahkan index pada kolom body di table blogs 
ALTER table blogs add fulltext blogs (body);

Template query untuk pencarian menggunakan fulltext indexing.

#template
select * from nama_table where (nama_kolom) against ("kata_kunci")

Sekarang kita lihat pengimplementasiannya

mysql> select * from blogs where match (body) against ("php");
+----+------------------------------------------------------------+
| id | body                                                       |
+----+------------------------------------------------------------+
|  1 | Satu objek yaitu: PHP                                      |
|  2 | Ada dua objek yaitu: PHP dan XAMPP                         |
|  3 | Ada tiga objek yaitu: PHP dan XAMPP dan MYSQL              |
|  4 | ada empat objek yaitu: PHP dan XAMPP dan MYSQL dan LARAVEL |
+----+------------------------------------------------------------+
4 rows in set (0,00 sec)

mysql> select * from blogs where match (body) against ("php mysql");
+----+------------------------------------------------------------+
| id | body                                                       |
+----+------------------------------------------------------------+
|  3 | Ada tiga objek yaitu: PHP dan XAMPP dan MYSQL              |
|  4 | ada empat objek yaitu: PHP dan XAMPP dan MYSQL dan LARAVEL |
|  1 | Satu objek yaitu: PHP                                      |
|  2 | Ada dua objek yaitu: PHP dan XAMPP                         |
+----+------------------------------------------------------------+
4 rows in set (0,01 sec)

mysql> select * from blogs where match (body) against ("php laravel");
+----+------------------------------------------------------------+
| id | body                                                       |
+----+------------------------------------------------------------+
|  4 | ada empat objek yaitu: PHP dan XAMPP dan MYSQL dan LARAVEL |
|  1 | Satu objek yaitu: PHP                                      |
|  2 | Ada dua objek yaitu: PHP dan XAMPP                         |
|  3 | Ada tiga objek yaitu: PHP dan XAMPP dan MYSQL              |
+----+------------------------------------------------------------+
4 rows in set (0,00 sec)

mysql> 

Sekarang hasil menjadi seperti yang kita inginkan, plus query ini otomatis mengurutkan hasil menurut text yang paling banyak berisi kata kuncinya ^^

Cukup menarik?

Terima kasih telah membaca.

Regards,

Philip Lambok