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

Cómo hacer una búsqueda de texto completo mysql de varias columnas donde se combinan palabras parciales

En el modo booleano, se requiere que las cadenas estén presentes (en lugar de solo obtener una puntuación más alta) con + . la coincidencia de prefijos se realiza con una terminación * . Esto parece ser lo que quieres, así que busca:

+John* +S*
+John* +Smith*
+Smith* +J*
+Jo* +S*

Tenga en cuenta que los índices de texto completo no pueden ayudarlo a buscar 'en cualquier parte de una palabra'. entonces algo como *mith* está destinado a fallar:están destinados a coincidir desde el carácter 1 en un índice.

Si también desea ordenarlos por valores de coincidencia y, por ejemplo, necesita John Smith antes Johnny Smithson , harías esto:

 SELECT * FROM user 
 WHERE MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE)
 ORDER BY MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE) DESC;

Lo que verás no te llevará a ninguna parte a menos que agregues todas las palabras>=ft_min_word_len de nuevo por separado:

+John* +S* John
+John* +Smith* John Smith
+Smith* +J* Smith
+Jo* +S*

Para el último, ambos son ft_min_world_len se desea de manera diferente.