Bài 4: Tìm kiếm toàn văn bản Boolean của MySQL
Last updated
Last updated
Tóm tắt : trong hướng dẫn này, bạn sẽ tìm hiểu cách thực hiện tìm kiếm toàn văn bản Boolean của MySQL. Ngoài ra, bạn sẽ học cách sử dụng các toán tử Boolean để hình thành các truy vấn tìm kiếm rất phức tạp.
Bên cạnh tìm kiếm toàn văn bản ngôn ngữ tự nhiên , MySQL hỗ trợ một hình thức tìm kiếm toàn văn bản bổ sung được gọi là tìm kiếm toàn văn bản Boolean. Trong chế độ Boolean, MySQL tìm kiếm các từ thay vì khái niệm như trong tìm kiếm ngôn ngữ tự nhiên.
MySQL cho phép bạn thực hiện tìm kiếm toàn văn dựa trên các truy vấn rất phức tạp trong chế độ Boolean cùng với các toán tử Boolean. Đây là lý do tại sao tìm kiếm toàn văn bản trong chế độ Boolean phù hợp với người dùng có kinh nghiệm.
Để thực hiện tìm kiếm toàn văn bản trong chế độ Boolean, bạn sử dụng công cụ IN BOOLEAN MODE
sửa đổi trong AGAINST
biểu thức. Ví dụ sau đây cho bạn thấy cách tìm kiếm sản phẩm có tên sản phẩm chứa Truck
từ đó.
Hai sản phẩm có tên sản phẩm chứa Truck
từ được trả lại.
Để tìm sản phẩm có tên sản phẩm chứa Truck
từ nhưng không có bất kỳ hàng nào chứa Pickup
, bạn có thể sử dụng toán tử Boolean ( -
) loại trừ , trả về kết quả loại trừ Pickup
từ khóa như truy vấn sau:
Bảng sau đây minh họa các toán tử Boolean tìm kiếm toàn văn bản và ý nghĩa của chúng:
Nhà điều hành
Sự miêu tả
+
Bao gồm, từ phải có mặt.
-
Không bao gồm, từ không được có mặt.
>
Bao gồm, và tăng giá trị xếp hạng.
<
Bao gồm 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 giá trị xếp hạng của một từ.
*
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 toán tử toàn văn bản boolean trong truy vấn tìm kiếm:
Để tìm kiếm các hàng có chứa ít nhất một trong hai từ: mysql hoặc hướng dẫn
'hướng dẫn mysql'
Để tìm kiếm các hàng có chứa cả hai từ: mysql và hướng dẫn
'+ mysql + hướng dẫn'
Để tìm kiếm các hàng có chứa từ mys mys mys, nhưng đặt thứ hạng cao hơn cho các hàng có chứa Hướng dẫn hướng dẫn:
'+ hướng dẫn mysql'
Để tìm kiếm các hàng có chứa từ "mys mys" nhưng không phải là hướng dẫn
'+ mysql -tutorial'
Để tìm kiếm các hàng có chứa từ mys mys mys và xếp hạng hàng thấp hơn nếu nó chứa từ hướng dẫn trực tuyến.
'+ mysql ~ hướng dẫn'
Để tìm kiếm các hàng có chứa các từ.
'+ mysql + (> hướng dẫn <đào tạo)'
Để tìm các hàng có chứa các từ bắt đầu bằng cách sử dụng tính năng của tôi, ví dụ như từ mys mys, ví dụ như my mysahoo, bạn sử dụng như sau:
'của tôi *'
MySQL không tự động sắp xếp các hàng theo thứ tự giảm mức độ liên quan trong tìm kiếm toàn văn bản Boolean.
Để 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 MATCH
biểu thức có một FULLTEXT
chỉ mục. 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 một truy vấn tìm kiếm trên các bảng InnoDB, ví dụ: '++ mysql'. MySQL sẽ trả về một lỗi nếu bạn làm như vậy. Tuy nhiên, MyISAM hành xử khác nhau. Nó bỏ qua các toán tử khác và sử dụng toán tử gần nhất với từ tìm kiếm, ví dụ: '+ -mysql' sẽ trở thành '-mysql'.
Tìm kiếm toàn văn của InnoDB không hỗ trợ dấu cộng (+) hoặc dấu trừ (-). Nó chỉ hỗ trợ dấu cộng hoặc dấu trừ hàng đầu. MySQL sẽ báo lỗi nếu bạn tìm kiếm từ là 'mysql +' hoặc 'mysql-'. Ngoài ra, các dấu cộng hoặc dấu trừ hàng đầu sau với ký tự đại diện không hợp lệ: + *, + -
Ngưỡng 50% không được áp dụng. Nhân tiện, ngưỡng 50% có nghĩa là nếu một từ xuất hiện trong hơn 50% số hàng, MySQL sẽ bỏ qua từ đó trong kết quả tìm kiếm.
Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách thực hiện tìm kiếm toàn văn bản Boolean của MySQL với nhiều toán tử Boolean hữu ích.