Fulltext search vào Laravel

Tram Ho

1. Thêm index trong migration

Fulltext là 1 kiểu index chấp nhận 1 hay nhiều cột. Vì Laravel không có hàm hỗ trợ tạo index fulltext nên ta sẽ phải tự viết.

Ở đây ta sử dụng Storage Engine MyISAM thay vì InnoDB

2. Định nghĩa trường searchable
Vào trong User model và thêm đoạn code dưới đây. Ta cần phải thêm đúng tên cột đã được định nghĩa trong bước 1.

Nếu ta không định nghĩa đúng các tên các cột, MySql sẽ không thể tìm ra được index và sẽ trả về lỗi SQLSTATE[HY000]: General error: 1191 Can’t find FULLTEXT index matching the column list.

3. Tạo Trait

Trong một project sẽ không chỉ có 1 model cần search. Thay vì viết code search trong tất cả các model đó, ta sẽ tạo 1 trait để tránh bị lặp lại code.
Tạo thư mục Traits trong app và file fulltextsearch.php

4. Config

-Bởi vì MySql không đánh index ở các từ có số ký tự nhỏ (mặc định là 4) nên ta sẽ phải thay đổi trường ft_min_word_len ở dưới dòng [mysqld] trong file my.cnf.
trên ubuntu:
sửa file trong /etc/mysql/my.cnf. Nếu bạn dùng XAMPP thì sửa trong file [thư mục cài xampp]/etc/mysql/my.cnf

-Ngoài ra, nếu các từ bạn search là stopword thì MySQL sẽ bỏ qua các từ này. Nếu bạn muốn bỏ stopword thì thêm dòng ft_stopword_file = “” vào trong file my.cnf.

5. Sử dụng


Bài này mình dịch từ trang https://arianacosta.com/php/laravel/tutorial-full-text-search-laravel-5/

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo