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

¿Limitaciones de indexación de texto completo de Mysql?

¡Ciertamente no lo es!

Cualquier término de búsqueda compuesto únicamente por palabras bloqueadas fallará silenciosamente. Las palabras se pueden bloquear debido a las restricciones de longitud mínima/máxima y/o al archivo de palabras vacías.

Encontré el archivo de palabras vacías predeterminado demasiado agresivo, impedía muchas búsquedas válidas. Además, la longitud mínima predeterminada de 4 se activaba muy a menudo para los acrónimos que la gente podría querer buscar. Reduje ft_min_word_len a 3 y eliminé la lista de palabras irrelevantes por completo (ft_stopword_file=''). Documento:http://dev.mysql.com /doc/refman/5.1/en/fulltext-fine-tuning.html

También puede examinar la consulta de búsqueda para ver si contiene solo palabras de <4 letras y recurrir a una búsqueda LIKE en ese caso. No existe una manera tan fácil de eludir la lista de palabras irrelevantes a nivel de aplicación.

Es posible que la selección de "caracteres de palabras" no satisfaga sus necesidades y es difícil cambiarla. Por ejemplo, buscar "Terry" no coincidirá con "Terry's". En general, no hay soporte para ningún tipo de derivación, por lo que "galleta" tampoco coincidirá con "galletas".

Finalmente, como mencionó cg, no hay soporte para InnoDB. Hoy en día, no desea colocar todos sus datos en una tabla MyISAM.

Si tiene almacenamiento de sobra, lo que puede hacer es colocar la versión canónica principal de los datos en una tabla InnoDB y luego crear una tabla MyISAM separada que contenga una copia del contenido de texto libre, únicamente para usar como cebo de búsqueda. Tiene que actualizar ambas tablas en un cambio, pero si la tabla MyISAM pierde integridad, al menos solo pierde la capacidad de buscar en las filas en cuestión, en lugar de arruinar los datos reales y obtener errores de aplicación.

Luego, si tiene los ciclos de sobra, puede implementar su propio procesamiento de texto en el cebo de búsqueda y consultar palabras para sortear algunas de las limitaciones anteriores. Por ejemplo, puede escapar los caracteres que desea que sean caracteres de palabras, eliminar los caracteres que no desea que sean caracteres de palabras y realizar una lematización manual sencilla en inglés.