Đây không phải là một câu hỏi đơn giản. Đặt cược tốt nhất của bạn là sử dụng một số loại tìm kiếm toàn văn bản . Tìm kiếm toàn văn bản có thể được định cấu hình để có các từ dừng (các từ bị loại bỏ khỏi tìm kiếm - như từ the
) và cũng có thể có giới hạn độ dài từ tối thiểu (các từ có độ dài ít hơn một số ký tự nhất định cũng bị loại bỏ khỏi tìm kiếm.
Tuy nhiên, nếu bạn chỉ sử dụng
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');
Sau đó, MySQL sẽ trả về không chỉ bản ghi với giá trị bạn đang tìm kiếm mà còn trả về các bản ghi chỉ có một số từ và theo thứ tự khác nhau. Cái bạn đã hiển thị có thể sẽ là một trong những cái xếp hạng cao nhất, nhưng không có gì đảm bảo rằng nó sẽ là cái được xếp hạng cao nhất.
Bạn có thể muốn sử dụng Tìm kiếm toàn văn bản Boolean
và thêm +
cho mọi từ tìm kiếm để buộc MySQL chỉ trả lại những bản ghi có tất cả các từ tìm kiếm:
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);
Nhưng, on
phải là một từ dừng (nằm trong danh sách từ khóa mặc định) hoặc phải ngắn hơn với độ dài từ tối thiểu, do đó nên được bỏ qua khỏi biểu thức tìm kiếm (bạn sẽ không nhận lại bất kỳ kết quả nào):
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);
Tôi biết rằng điều này yêu cầu thay đổi biểu thức tìm kiếm, tuy nhiên, điều này sẽ giúp bạn có được kết quả tốt nhất bằng cách sử dụng chức năng tích hợp của MySQL.
Giải pháp thay thế là sử dụng các công cụ tìm kiếm toàn văn bản khác, chẳng hạn như sphinx để thực hiện tìm kiếm cho bạn.