markdown Meningkatkan Performa Pencarian Text dengan Menggunakan全文索引

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)







以上是关于markdown Meningkatkan Performa Pencarian Text dengan Menggunakan全文索引的主要内容,如果未能解决你的问题,请参考以下文章

如何计算Hits per second

Presto + query.max-memory-per-node 配置

linux内核源码分析之per-CPU

php classe per la validazione del CF e per estrazione data di nascita e sesso

SQL查询中IN语句条件为一个数组如何进行查询?(ASP提示类型不匹配)

Per.js速度对比Vue.js