Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tìm kiếm nhanh chuỗi trong MySQL với Full-text Search

Giới thiệu

Sử dụng chỉ mục FULLTEXT và MATCH() ... AGAINST() để tìm kiếm văn bản nhanh chóng trên cột TEXT/VARCHAR lớn.

1. Tạo bảng

mysql> create table DemoTable1554 (
    -> Title text
    -> ); 
Query OK, 0 rows affected (0.63 sec)

2. Tạo chỉ mục FULLTEXT

mysql> create fulltext index faster_title on DemoTable1554(Title); 
Query OK, 0 rows affected, 1 warning (7.09 sec)
Records: 0 Duplicates: 0 Warnings: 1

3. Chèn dữ liệu

mysql> insert into DemoTable1554 values('John is working on MySQL database'); 
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable1554 values('Adam Smith is working on Java language'); 
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1554 values('John smith is working on Python Language'); 
Query OK, 1 row affected (0.17 sec)

4. Dữ liệu gốc

mysql> select * from DemoTable1554;
+------------------------------------------+
| Title                                    |
+------------------------------------------+
| John is working on MySQL database        |
| Adam Smith is working on Java language   |
| John smith is working on Python Language |
+------------------------------------------+
3 rows in set (0.00 sec)

5. Tìm kiếm từ khóa "language" (boolean mode)

mysql> select * from DemoTable1554 
    -> where match(Title) against('language' in boolean mode);

6. Kết quả

+------------------------------------------+
| Title                                    |
+------------------------------------------+
| Adam Smith is working on Java language   |
| John smith is working on Python Language |
+------------------------------------------+
2 rows in set (0.00 sec)

Ưu điểm FULLTEXT vs LIKE:

Đặc điểmLIKE '%term%'FULLTEXT
Tốc độ bảng lớnRất chậm (full scan)Nhanh (index)
Hỗ trợ từ ngữKhôngCó (stemming, stopwords)
Boolean operatorsKhôngCó (+, -, *, "")
Điểm liên quan (relevance)KhôngCó
Khoảng trắng/ngôn ngữKhông xử lýCó parser

Lưu ý: Từ khóa quá ngắn (mặc định < 4 ký tự) bị bỏ qua. Cấu hình ft_min_word_len.