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

¿Cómo obtiene su búsqueda booleana de texto completo para recoger el término C ++?

Tendrás que cambiar la idea de MySQL de lo que es una palabra.

En primer lugar, la longitud mínima de palabra predeterminada es 4. Esto significa que ningún término de búsqueda que contenga solo palabras de <4 letras coincidirá nunca, ya sea 'C++' o 'cpp'. Puede configurar esto usando ft_min_word_len opción de configuración, por ejemplo. en su my.cfg:

[mysqld]
ft_min_word_len=3

(Luego detenga/inicie MySQLd y reconstruya los índices de texto completo).

En segundo lugar, MySQL no considera '+' como una letra. Puede convertirlo en una letra, pero eso significa que no podrá buscar la palabra 'fish' en la cadena 'fish+chips', por lo que se requiere cuidado. Y no es trivial:requiere volver a compilar MySQL o piratear un juego de caracteres existente. Consulte la sección que comienza "Si desea cambiar el conjunto de caracteres que se consideran caracteres de palabra..." en sección 11.8.6 del doc.

Sí, algo así es una solución común:puede mantener sus datos "reales" (sin que se escapen) en una tabla primaria y definitiva, generalmente usando InnoDB para el cumplimiento de ACID. Luego, se puede agregar una tabla MyISAM auxiliar, que contiene solo las palabras alteradas para el cebo de búsqueda de texto completo. También puede hacer una forma limitada de lematización usando este enfoque.

Otra posibilidad es detectar búsquedas que MySQL no puede hacer, como aquellas con solo palabras cortas o caracteres inusuales, y recurrir a una búsqueda LIKE o REGEXP simple pero lenta solo para esas búsquedas. En este caso, probablemente también desee eliminar la lista de detención configurando ft_stopword_file a una cadena vacía, ya que no es práctico seleccionar todo lo que contiene como especial también.