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