Je pense que vous voulez utiliser recherche booléenne en texte intégral
Si vous correspondez sans opérateurs +
-
contre tel que green red blue
toutes les lignes sont renvoyées, lorsqu'un enregistrement contient au moins un mot :green
ou red
ou blue
.
IN BOOLEAN MODE
et sans les opérateurs, chaque mot correspondant marquera 1
. Donc, s'il y a un enregistrement correspondant à deux des trois mots, il obtiendra le score 2
.
Pour obtenir les lignes avec au moins 2 score :
SELECT *,
MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE) `score`
FROM `my_tab` WHERE
MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE)
HAVING `score` >= 2
ORDER BY `score` DESC
En mode langage naturel la notation fonctionne complètement différemment. Je pense que c'est principalement basé sur BM25 .
Sur de grands ensembles de données recherche booléenne en texte intégral (en utilisant un index en texte intégral
) surpasse généralement REGEXP
ou LIKE
de loin si les mots correspondent quelque part dans le texte. N'utiliserait que like/regexp pour la correspondance à partir de l'initiale telle que REGEXP '^word'
ou LIKE 'word%'
- si un index peut être utilisé.