2011-08-27 44 views
5

Trong ứng dụng web của tôi, sẽ có một số người dùng. và họ có nội dung riêng của họ được tải lên webapp của tôi. Đối với mỗi nội dung tải lên, nội dung đó có tiêu đề, mô tả và thẻ (từ khóa). Tôi có thể viết một kịch bản tìm kiếm để tìm kiếm nội dung hoặc tên người dùng. nhưng họ từ khóa khi họ đã đưa ra một lỗi chính tả nó không trả lại bất kỳ kết quả nào. Ví dụ: nếu có người dùng có tên "Michael" trong cơ sở dữ liệu và truy vấn tìm kiếm là "Micheal" tôi sẽ nhận được "Ý của bạn là tìm kiếm 'Michael'" không có gì khác ngoài đề xuất tìm kiếm.Đề xuất tìm kiếm MySQL PHP

Ngoài ra, đề xuất này phải dành cho nội dung do người dùng tải lên. Người dùng có thể giữ tiêu đề nội dung của họ là "hoạt động của Michael May 2011" và các đề xuất sẽ được tạo cho từng từ riêng lẻ.

Trả lời

8

Bạn có thể sử dụng Soundex để tìm kiếm tên tương tự nhưng như thế:

SELECT * FROM users WHERE SOUNDEX(name) = SOUNDEX(:input) 

hay như thế

SELECT * FROM users WHERE name SOUNDS_LIKE :input 

(đó là hoàn toàn tương đương)

Edit: nếu bạn cần phải sử dụng một thuật toán khác với Soundex, như Martin Hohenberg đề xuất, bạn sẽ cần phải thêm một cột phụ vào bảng của bạn, được gọi là, ví dụ, sound_equivalent. (Đây thực sự là một giải pháp hiệu quả hơn vì cột này có thể được lập chỉ mục). sau đó yêu cầu sẽ là:

SELECT * FROM users WHERE sound_equivalent = :input_sound_equivalent 

Nội dung của cột sound_equivalent sau đó có thể được tạo ra với một thuật toán PHP, và chèn trong bảng với phần còn lại của các tham số người dùng.

+2

Đảm bảo sử dụng thuật toán kiểu âm thanh được thiết kế để phát âm ngôn ngữ của bạn. Ví dụ: đối với tiếng Đức, Soundex ít hữu ích hơn và phải được thay thế bằng Kölner Phonetik (không phải là một phần của MYSQL) – ty812

0

Có thể tạo cơ sở dữ liệu các từ phổ biến nhất (như: chó, nhà, thành phố, số, nước, internet). Không cần phải làm cho nó lớn (< 10000 từ). Sau đó, khi bạn phát hiện cụm từ tìm kiếm, hãy kiểm tra cơ sở dữ liệu "từ" cho các từ LIKE các cụm từ tìm kiếm. Sau đó, chỉ cần lặp lại các gợi ý.

2

Bạn cũng có thể sử dụng thư viện php pspell để nhận đề xuất nếu bạn không có kết quả tìm kiếm.

Các vấn đề liên quan