2011-08-27 11 views
5

En mi aplicación web habrá varios usuarios. y tienen sus propios contenidos cargados en mi aplicación web. Para cada contenido que cargan, tiene un título, una descripción y etiquetas (palabras clave). Puedo escribir un script de búsqueda para buscar contenido o nombre de usuario. pero las palabras clave cuando han dado un error ortográfico no arrojan ningún resultado. Por ejemplo, si hay un usuario llamado "Michael" en la base de datos y la consulta de búsqueda fue "Micheal" debería obtener "¿Quiso decir 'Michael'", que no es otra cosa que una sugerencia de búsqueda.PHP MySQL Search Suggestions

También esta sugerencia debe ser para los contenidos cargados por el usuario. Un usuario puede mantener el título de su contenido como "Actividades de Michael en mayo de 2011" y se deben generar sugerencias para palabras individuales.

Respuesta

8

Usted podría utilizar SOUNDEX para buscar nombres de sonido similar, al igual que:

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

o igual que

SELECT * FROM users WHERE name SOUNDS_LIKE :input 

(que es completamente equivalente)

Editar: si necesita usar un algoritmo que no sea Soundex, como sugirió Martin Hohenberg, necesitaría agregar una columna adicional a su tabla, llamada, por ejemplo, sound_equivalent. (Esta es en realidad una solución más eficiente ya que esta columna se puede indexar). La solicitud sería entonces:

SELECT * FROM users WHERE sound_equivalent = :input_sound_equivalent 

El contenido de la columna de la sound_equivalent entonces se pueden generar con un algoritmo de PHP, y se inserta en la tabla con el resto de parámetros de usuario.

+2

Asegúrese de utilizar un algoritmo de estilo soundex diseñado para la pronunciación de su idioma. Por ejemplo, para alemán, Soundex es menos útil, y debería ser reemplazado por Kölner Phonetik (que no es parte de MYSQL) – ty812

0

Tal vez crear una base de datos de las palabras más comunes (como: perro, casa, ciudad, números, agua, internet). No es necesario que sea grande (< 10000 palabras). Luego, cuando explota el término de búsqueda, verifique en la base de datos "palabra" las palabras COMO los términos de búsqueda. Entonces solo repite las sugerencias.

2

También puede utilizar la biblioteca php pspell para obtener sugerencias si no tiene resultados de búsqueda.