markdown Meningkatkan Performa Pencarian Text dengan Menggunakan全文索引
# 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.
```sql
# 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`.
```bash
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.
```bash
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.
```sql
# Menambahkan index pada kolom body di table blogs
ALTER table blogs add fulltext blogs (body);
```
Template query untuk pencarian menggunakan fulltext indexing.
```sql
#template
select * from nama_table where (nama_kolom) against ("kata_kunci")
```
Sekarang kita lihat pengimplementasiannya
```bash
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](https://philiplambok.github.io)