Giới thiệu
MySQL hỗ trợ tìm kiếm toàn văn bản (Full-text Search) thông qua chỉ mục FULLTEXT và cú pháp MATCH() ... AGAINST(). Phù hợp cho tìm kiếm ngôn ngữ tự nhiên trên cột văn bản lớn.
1. Tạo bảng
mysql> create table DemoTable1542 (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (2.16 sec)
2. Tạo chỉ mục FULLTEXT
mysql> create fulltext index search_name on DemoTable1542(Name); Query OK, 0 rows affected, 1 warning (10.51 sec) Records: 0 Duplicates: 0 Warnings: 1
Cảnh báo thường do phiên bản MySQL cũ không hỗ trợ FULLTEXT trên InnoDB (hỗ trợ từ 5.6+).
3. Chèn dữ liệu
mysql> insert into DemoTable1542(Name) values('John Doe');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable1542(Name) values('Chris Brown');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable1542(Name) values('John Smith');
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable1542(Name) values('Adam Smith');
Query OK, 1 row affected (4.71 sec)
4. Tìm kiếm với MATCH AGAINST
mysql> select * from DemoTable1542 where match(Name) against('John' in boolean mode);
5. Kết quả
+----+------------+ | Id | Name | +----+------------+ | 1 | John Doe | | 3 | John Smith | +----+------------+ 2 rows in set (0.03 sec)
Các chế độ tìm kiếm:
IN NATURAL LANGUAGE MODE: Mặc định, tìm kiếm ngôn ngữ tự nhiênIN BOOLEAN MODE: Hỗ trợ toán tử +, -, *, "", ví dụ:+John -DoeWITH QUERY EXPANSION: Mở rộng truy vấn dựa trên kết quả liên quan
Lưu ý: FULLTEXT chỉ hoạt động trên MyISAM (tất cả phiên bản) và InnoDB (từ 5.6+). Cần đặt ft_min_word_len phù hợp (mặc định 4 ký tự).