No modo booleano, exigir que as strings estejam presentes (em vez de apenas pontuar mais alto) é feito com
+
. a correspondência de prefixo é feita com uma terminação *
. Isso parece ser o que você quer, então procure por:+John* +S*
+John* +Smith*
+Smith* +J*
+Jo* +S*
Observe que os índices de texto completo não podem ajudá-lo a pesquisar 'em qualquer lugar em uma palavra'. algo como
*mith*
está fadado a falhar:eles devem corresponder ao caractere 1 em um índice. Se você também deseja ordená-los por valores de correspondência e, por exemplo, precisa de
John Smith
antes Johnny Smithson
, você faria isso: SELECT * FROM user
WHERE MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE)
ORDER BY MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE) DESC;
O que você verá não o levará a lugar nenhum, a menos que você adicione todas as palavras>=
ft_min_word_len
novamente separadamente:+John* +S* John
+John* +Smith* John Smith
+Smith* +J* Smith
+Jo* +S*
Para o último, ambos são