2009-07-29 18 views
7

Tengo un sitio que enumera películas. Naturalmente las personas cometen errores ortográficos al buscar películas, y por supuesto que algunas películas tienen apóstrofes, usan letras para deletrear números en el título, etc.¿Cuál es la mejor manera de implementar la corrección de errores en una búsqueda en php/mysql?

¿Cómo hago para que mi script de búsqueda pase por alto estos errores? ? Probablemente necesite algo que sea un poco más inteligente que WHERE mov_title LIKE '%keyword%'.

Se sugirió que use un motor de búsqueda de texto completo, pero todas esas cosas se ven muy complicadas, y creo que su construcción en mi aplicación será como el infierno en la tierra. Si tengo que usar uno, ¿cuál es el menos invasivo, será más fácil implementarlo en el código existente?

Respuesta

6

Creo que tendrá que implementar un motor de búsqueda de texto completo externo. MySQL simplemente no es bueno en la búsqueda de texto completo. Diría que debes dar una oportunidad al Lucene (tutorials). Zend Framework has an API que se conecta a Lucene, por lo que es más fácil de aprender y utilizar.

+0

¿Lucene tiene reconocimiento de errores tipográficos incorporado? ¿Qué pasa con sphinxsearch? –

+1

Sí, Lucene admite consultas de búsqueda difusa. El algoritmo se basa en la distancia de Levenshtein. La API de Java se ve así: http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/search/FuzzyQuery.html – PatrikAkerstrand

+0

¿No hay otra forma que no sea usar Lucene? –

0

No he usado ni php ni mysql, pero una alternativa a la búsqueda de texto completo podría ser soundex searches.

+0

mysql por defecto admite sundex – Sethunath

1

Suponiendo que utiliza MySQL - MySQL no tiene una funcionalidad incorporada que sea capaz de hacer esto.

Esto significa que tendrá que implementar una búsqueda de texto completo usted mismo, o utilizar una herramienta de búsqueda de texto completo de terceros.

  • Si implementa usted mismo, usted debe buscar en los metaphone o double metaphone algoritmos (recomiendo ellos durante soundex, que no es tan bueno en este tipo de tareas), para almacenar representaciones phoenetic de toda su palabras. Sin embargo, construir tu propia búsqueda de texto completo no es una tarea para los pusilánimes. No lo intentes si no te consideras un asistente de base de datos.
  • Si desea una herramienta de terceros, Lucene es el camino a seguir. Está portado en toneladas de diferentes idiomas/plataformas including PHP - no es necesario usar Java.
Cuestiones relacionadas