2011-08-27 7 views
5

Dans mon application web il y aura plusieurs utilisateurs. et ils ont leurs propres contenus téléchargés sur ma webapp. Pour chaque contenu, ils ont un titre, une description et des tags (mots-clés). Je peux écrire un script de recherche pour rechercher du contenu ou un nom d'utilisateur. mais ils mots-clés quand ils ont donné avec une faute d'orthographe il ne renvoie aucun résultat. Par exemple, s'il y a un utilisateur nommé "Michael" dans la base de données et que la requête de recherche était "Micheal" je devrais obtenir "Vouliez-vous rechercher" Michael "" qui n'est autre qu'une suggestion de recherche.Suggestions de recherche PHP MySQL

Aussi cette suggestion devrait être pour le contenu téléchargé par l'utilisateur. Un utilisateur peut conserver le titre de son contenu en tant qu '«activités de Michael Mai 2011» et des suggestions doivent être générées pour des mots individuels.

Répondre

8

Vous pouvez utiliser SOUNDEX pour rechercher des noms similaires à consonance, comme ça:

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

ou comme

SELECT * FROM users WHERE name SOUNDS_LIKE :input 

(ce qui est tout à fait équivalent)

Edit: si vous Comme l'a suggéré Martin Hohenberg, vous devez ajouter une colonne supplémentaire à votre table, appelée, par exemple, sound_equivalent. (C'est en fait une solution plus efficace car cette colonne peut être indexée). La demande serait alors:

SELECT * FROM users WHERE sound_equivalent = :input_sound_equivalent 

Le contenu de la colonne de sound_equivalent peut alors être généré par un algorithme de PHP, et inséré dans la table avec le reste des paramètres utilisateur.

+2

Veillez à utiliser un algorithme de type soundex conçu pour la prononciation de votre langue. Par exemple, pour l'allemand, Soundex est moins utile, et devrait être remplacé par le Kölner Phonetik (qui ne fait pas partie de MYSQL) – ty812

0

Peut-être créer une base de données avec les mots les plus communs (comme: chien, maison, ville, nombres, eau, internet). Ne pas besoin de faire grand (< 10000 mots). Ensuite, lorsque vous explosez le terme de recherche, vérifiez la base de données "mot" pour les mots comme les termes de recherche. Alors juste faire écho aux suggestions.

2

Vous pouvez également utiliser la bibliothèque php pspell pour obtenir des suggestions si vous n'avez aucun résultat de recherche.