Thật không may, bạn không thể làm điều này bằng cách sử dụng chỉ mục toàn văn bản MySQL. Bạn không thể truy xuất '*nited states'
ngay lập tức từ chỉ mục vì các ký tự bên trái là phần quan trọng nhất của chỉ mục. Tuy nhiên, bạn có thể tìm kiếm 'United Sta*'
.
// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)
Toàn văn của MySQL hoạt động tốt nhất khi tìm kiếm toàn bộ từ trong câu - thậm chí điều đó đôi khi có thể tệ hại. Nếu không, tôi khuyên bạn nên sử dụng công cụ toàn văn bên ngoài như Solr hoặc Sphinx . Tôi nghĩ Sphinx cho phép ký tự đại diện tiền tố và hậu tố, không chắc chắn về những ký tự đại diện khác.
Bạn có thể quay lại LIKE
của MySQL , nhưng một lần nữa, chạy các truy vấn như LIKE '%nited states'
hoặc LIKE '%nited Stat%'
, cũng sẽ ảnh hưởng đến hiệu suất, vì nó không thể sử dụng chỉ mục trên một vài ký tự đầu tiên. 'United Sta%'
và 'Unit%States'
không sao vì chỉ mục có thể được sử dụng đối với nhóm ký tự đã biết đầu tiên.
Một lưu ý khá quan trọng khác khi sử dụng lập chỉ mục toàn văn của MySQL là danh sách từ dừng và cài đặt độ dài từ tối thiểu . Ví dụ:trên môi trường lưu trữ chia sẻ, bạn sẽ bị giới hạn các từ lớn hơn hoặc bằng 4 ký tự. Vì vậy, tìm kiếm 'Goo' để lấy 'Google' sẽ không thành công. Danh sách từ dừng cũng không cho phép các từ phổ biến như 'và', 'có thể' và 'bên ngoài' - trên thực tế, có 548 từ dừng cùng nhau! Một lần nữa, nếu không sử dụng dịch vụ lưu trữ được chia sẻ, các cài đặt này tương đối dễ sửa đổi, nhưng nếu bạn đang sử dụng, thì bạn sẽ khó chịu với một số cài đặt mặc định.