2008-11-14 3 views
5

Al utilizar la búsqueda de texto completo de MySQL en modo booleano, hay ciertos caracteres como + y - que se utilizan como operadores. Si busco algo como "C++", interpreta el + como operador. ¿Cuál es la mejor práctica para tratar con estos personajes especiales?Manejo de caracteres completos de texto de MySQL

El método actual que estoy usando es convertir todos los caracteres + en los datos a _plus. También convierte &, @,/y # caracteres en una representación textual.

Respuesta

4

No hay forma de hacerlo bien utilizando la búsqueda de texto completo de MySQL. Lo que está haciendo (sustituyendo caracteres especiales con una cadena predefinida) es la única forma de hacerlo.

En su lugar, puede considerar usar Sphinx Search. Al parecer, admite el escape de caracteres especiales y, según todos los informes, es significativamente más rápido que la búsqueda predeterminada de texto completo.

3

MySQL es bastante brutal en lo que tokens ignora cuando construye sus índices de texto completo. Yo diría que cuando encuentre el término "C++" probablemente borre los caracteres más, dejando solo C, y luego ignore eso porque es demasiado corto. Probablemente puedas configurar MySQL para incluir palabras de una sola letra, pero no está optimizado para eso, y dudo que puedas obtener el tratamiento de los caracteres más como quieras.

Si necesita un buen motor de búsqueda interno donde pueda configurar este tipo de cosas, consulte Lucene que ha sido portado a varios idiomas including PHP (in the Zend framework).

O si necesita más para "etiquetar" que para buscar texto, puede que haya otra cosa más apropiada.

Cuestiones relacionadas