Pregunta

¿Cuáles son las limitaciones o las trampas o antipatrones o trampas?

Parece bastante atractivo, aparentemente puedes crear un motor de búsqueda casi sin trabajo. Pero no puede ser sin sus problemas ...

¿cuáles son tus experiencias?

¿Fue útil?

Solución

En mi opinión, el mayor inconveniente es que la indexación de texto completo de MySQL se limita a las tablas MyISAM. Como se opuso a las tablas de InnoDB, estas carecen de muchas características importantes, p. transacciones.

Otros consejos

  

no puede estar sin sus problemas ...

¡Ciertamente no lo es!

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

El archivo de palabras por defecto me pareció demasiado agresivo, estaba evitando muchas búsquedas válidas. Además, la longitud mínima predeterminada de 4 era muy frecuente para las siglas que las personas querrían buscar. Reduje ft_min_word_len a 3 y eliminé completamente la lista de parada (ft_stopword_file = ''). Doc: http://dev.mysql.com/doc /refman/5.1/en/fulltext-fine-tuning.html

También podría 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 sortear la lista de escalas a nivel de aplicación.

La selección de & # 8216; caracteres de palabras & # 8217; Es posible que no satisfaga sus necesidades, y es difícil cambiarlo. Por ejemplo, buscando & # 8220; Terry & # 8221; no coincidirá con & # 8220; Terry's & # 8221 ;. En general, no hay soporte para ningún tipo de derivación, por lo que & # 8220; biscuit & # 8221; no coincidirá con & # 8220; galletas & # 8221; tampoco.

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

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

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

Para tablas grandes, necesitará aumentar el tamaño de su búfer y el límite de caché en su archivo de configuración de MySQL.

También las columnas MATCH () que usa en la búsqueda deben ser las mismas que las columnas en el índice.

Además de la muy buena respuesta de bobince, hay un artículo en la documentación de MySQL que habla sobre las restricciones de texto completo. Espero que esto ayude. http://dev.mysql.com/doc/refman/5.0 /en/fulltext-restrictions.html (Olafur Waage ya habló de uno de estos)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top