Mysql
 sql >> Base de données >  >> RDS >> Mysql

php/mysql. Existe-t-il une fonction mysql pour détecter si au moins 2 certains mots existent dans au moins un champ de ligne mysql

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é.