sql >> Base de Datos >  >> RDS >> Mysql

Búsqueda con comodines en la búsqueda de texto completo de MySQL

Desafortunadamente, no puede hacer esto usando un índice de texto completo de MySQL. No puede recuperar '*nited states' instantáneamente desde el índice porque los caracteres de la izquierda son la parte más importante del índice. Sin embargo, puede buscar 'United Sta*' .

// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)

El texto completo de MySQL funciona mejor cuando se buscan palabras completas en oraciones, incluso eso puede apestar a veces. De lo contrario, sugeriría usar un motor de texto completo externo como Solr o Esfinge . Creo que Sphinx permite comodines de prefijo y sufijo, no estoy seguro de los demás.

Podría volver a LIKE de MySQL cláusula, pero de nuevo, ejecutando consultas como LIKE '%nited states' o LIKE '%nited Stat%' , también sufrirá en el rendimiento, ya que no puede usar el índice en los primeros caracteres. 'United Sta%' y 'Unit%States' están bien ya que el índice se puede usar contra el primer grupo de caracteres conocidos.

Otra advertencia bastante importante al usar la indexación de texto completo de MySQL es la lista de palabras vacías y configuración mínima de longitud de palabra . Por ejemplo, en un entorno de alojamiento compartido, estará limitado a palabras mayores o iguales a 4 caracteres. Por lo tanto, la búsqueda de 'Goo' para obtener 'Google' fallaría. La lista de palabras vacías también rechaza palabras comunes como 'y', 'quizás' y 'fuera'; de hecho, ¡hay 548 palabras vacías en total! Nuevamente, si no usa un alojamiento compartido, esta configuración es relativamente fácil de modificar, pero si lo hace, se molestará con algunas de las configuraciones predeterminadas.