Vấn đề sai chính tả rất khó, nếu không muốn nói là không thể, để giải quyết tốt trong MySQL thuần túy.
FULLTEXT
nhiều cột tìm kiếm không quá tệ.
Truy vấn của bạn sẽ trông giống như thế này ...
SELECT column, column
FROM table
WHERE MATCH(Company, FirstName, LastName, whatever, whatever)
AGAINST('search terms' IN NATURAL LANGUAGE MODE)
Nó sẽ tạo ra một loạt các kết quả, được sắp xếp theo thứ mà MySQL đoán là có khả năng bị tấn công đầu tiên nhất. Các phỏng đoán của MySQL không tuyệt vời, nhưng chúng thường phù hợp.
Bạn sẽ cần FULLTEXT
chỉ mục khớp với danh sách các cột trong MATCH()
của bạn mệnh đề. Tạo chỉ mục đó trông như thế này.
ALTER TABLE book
ADD FULLTEXT INDEX Fulltext_search_index_1
(Company, FirstName, LastName, whatever, whatever);
Mặc dù có nhận xét trong câu hỏi của bạn, bạn chỉ cần một chỉ mục cho nhóm cột mà bạn sẽ tìm kiếm.
20K hàng sẽ không phải là gánh nặng lớn đối với bất kỳ phần cứng máy chủ cổ điển nào gần đây.
Viết sai chính tả:Bạn có thể thử SOUNDEX()
, nhưng đó là một thuật toán đầu thế kỷ 20 do Hệ thống Bell thiết kế để tra cứu tên của các dân tộc bằng tiếng Anh Mỹ. Nó được thiết kế để nhận được nhiều lượt truy cập dương tính giả và nó thực sự tồi tệ hơn một xô đá.
Nếu bạn thực sự cần sửa lỗi chính tả, bạn có thể cần điều tra Sphinx.