En mode booléen, exiger que les chaînes soient présentes (au lieu de simplement marquer plus haut), se fait avec +
. la correspondance des préfixes se fait avec une terminaison *
. Cela semble être ce que vous voulez, alors recherchez :
+John* +S*
+John* +Smith*
+Smith* +J*
+Jo* +S*
Notez que les index de texte intégral ne peuvent pas vous aider à rechercher « n'importe où dans un mot ». donc quelque chose comme *mith*
est voué à l'échec :ils sont censés correspondre à partir du caractère 1 d'un index.
Si vous souhaitez également les trier par valeurs de correspondance, et par exemple, avez besoin de John Smith
avant Johnny Smithson
, vous feriez ceci :
SELECT * FROM user
WHERE MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE)
ORDER BY MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE) DESC;
Ce que vous verrez ne vous mènera nulle part à moins que vous n'ajoutiez tous les mots>=ft_min_word_len
à nouveau séparément :
+John* +S* John
+John* +Smith* John Smith
+Smith* +J* Smith
+Jo* +S*
Pour le dernier, les deux sont