06/04/2021, 14:50

Boolean Full-Text Searches trong MySQL - MySQL nâng cao

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, ...

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)

SELECT productName, productline
FROM products
WHERE MATCH(productName) 
      AGAINST('Truck' IN BOOLEAN MODE )

Kết quả:

mysql boolean tex searches product name with keyword truck png

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 )

mysql boolean tex searches with Boolean operator png

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.

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ừ mysqltutorial.

‘+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ừ mysqltutorial, hoặc tutorialtraining, 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.

Bùi Văn Nam

27 chủ đề

7090 bài viết

Cùng chủ đề
0