Boolean Full-Text Searches trong MySQL
Trong bài này mình sẽ giới thiệu thuật ngữ Boolean Full-Text Searches trong MySQL, đây là các chế độ tìm kiếm khi sử dụng để truy vấn cho những column có sử dụng chỉ mục full text search.
1. MySQL Boolean Full-Text Searches là gì?
Ở bài trước mình có nhắc đến cụm từ IN NATURAL LANGUAGE MODE, đây là một trong những chế độ của Full-Text Searches.
Theo tìm kiếm tự nhiên thì trong văn bản chỉ cần xuất hiện một trong số những từ mà ta đặt nó ở đầu vào là sẽ trả kết quả về. Tuy nhiên có một số trường hợp mình muốn phải xuất hiện ít nhất 2 từ nào đó thì lúc này phải sử dụng các chế độ MODE.
Ví dụ: Tìm kiếm từ khóa Truck trong chế độ bắt buộc phải có (IN BOOLEAN MODE)
Bài viết này được đăng tại [free tuts .net]
SELECT productName, productline FROM products WHERE MATCH(productName) AGAINST('Truck' IN BOOLEAN MODE )
Kết quả:
Hai sản phẩm trả về do có chứa từ Truck.
Để tìm kiếm các record xuất hiện từ Truck nhưng không được xuất hiện từ Pickup thì bạn sử dụng dấu trừ -
đằng trước cụm từ không muốn xuất hiện.
SELECT productName, productline FROM products WHERE MATCH(productName) AGAINST('Truck -Pickup' IN BOOLEAN MODE )
2. Các toán tử trong Boolean Full-Text Searches
Dưới đây là danh sách những toán tử giúp bạn có thể xư lý tìm kiếm một cách linh động hơn.
Toán tử | Mô tả |
---|---|
+ | Từ phải xuất hiện |
– | Từ không được xuất hiện |
> | Bao gồm từ này, và tăng giá trị xếp hạng |
< | Bao gồm từ này, và giảm giá trị xếp hạng |
() | Nhóm các từ thành các biểu thức con (cho phép chúng được bao gồm, loại trừ, xếp hạng, v.v. như một nhóm). |
~ | Phủ định một từ được xếp hạng |
* | Ký tự đại diện ở cuối từ |
“” | Xác định một cụm từ (trái ngược với danh sách các từ riêng lẻ, toàn bộ cụm từ được khớp để đưa vào hoặc loại trừ). |
Các ví dụ sau minh họa cách sử dụng các toán tử toàn văn bản boolean trong truy vấn tìm kiếm:
Ví dụ 1: Để tìm kiếm các hàng có ít nhất một trong hai từ: mysql hoặc tutorial.
‘mysql tutorial’
Ví dụ 2: Để tìm các hàng xuất hiện cả hai từ mysql và tutorial.
‘+mysql +tutorial’
Ví dụ 3: Để tìm các hàng bắt buộc có từ mysql nhưng từ tutorial thì có thể có hoặc không.
‘+mysql tutorial’
Ví dụ 4: Để tìm các hàng xuất hiện từ mysql nhưng không được xuất hiện từ tutorial.
‘+mysql -tutorial’
Ví dụ 5: Để tìm kiếm các hàng có chứa từ mysql và xếp hạng hàng thấp hơn nếu nó chứa từ tutorial.
‘+mysql ~tutorial’
Ví dụ 6: Để tìm kiếm các hàng có chứa các từ mysql và tutorial, hoặc tutorial và training, nhưng đặt các hàng có chứa mysql tutorial cao hơn so với mysql training.
‘+mysql +(>tutorial <training)’
Ví dụ 7: Để tìm kiếm các từ bắt đầu bằng chữ my, ví dụ mysql, myadmin.
‘my*’
3. Các tính chất của Boolean Full-Text Searches
- MySQL không tự động sắp xếp các hàng theo mức độ liên quan theo thứ tự giảm dần trong kỹ thuật Boolean full text search.
- Để thực hiện các truy vấn Boolean, các bảng InnoDB yêu cầu tất cả các cột của biểu thức MATCH phải có chỉ mục FULLTEXT. Lưu ý rằng các bảng MyISAM không yêu cầu điều này, mặc dù tìm kiếm khá chậm.
- MySQL không hỗ trợ nhiều toán tử Boolean trên truy vấn tìm kiếm trên các bảng InnoDB. Ví dụ từ '++ mysql' sẽ trả về một lỗi. Tuy nhiên, MyISAM thì lai khác, nó bỏ qua các toán tử khác và sử dụng toán tử gần nhất. Ví dụ từ '+ -mysql' sẽ trở thành ‘ -mysql'.
- Full Text Search của InnoDB không hỗ trợ dấu cộng (+) hoặc dấu trừ (-) trong từ khóa tìm kiếm, nó chỉ hỗ trợ nằm ở hàng đầu vì đó là các toán tử boolean. MySQL sẽ báo lỗi nếu bạn tìm kiếm từ là 'mysql +', hoặc 'mysql-'.
- Ngưỡng 50% có nghĩa là nếu một từ xuất hiện hơn 50% số hàng, MySQL sẽ bỏ qua từ đó trong kết quả tìm kiếm.
Trên là những thông tin hữu ích về cách sử dụng Boolean Full-Text Searches trong MySQL. Đây là bài khá quan trọng vì nó giúp bạn xử lý truy vấn lấy kết quả trả về một cách tốt hơn.