Acho que você quer usar a pesquisa booleana de texto completo
Se você corresponder sem operadores
+ - contra como green red blue todas as linhas são retornadas, onde um registro contém pelo menos uma palavra:green ou red ou blue . IN BOOLEAN MODE e sem operadores cada palavra correspondente pontuará 1 . Portanto, se houver um registro que corresponda a duas das três palavras, ele pontuaria 2 . Para obter as linhas com pelo menos 2 pontos:
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
No modo de linguagem natural pontuação funciona completamente diferente. Acho que é baseado principalmente em BM25 .
Em grandes conjuntos de dados, pesquisa de texto completo booleano (usando um índice de texto completo ) geralmente supera
REGEXP ou LIKE de longe se as palavras correspondentes em algum lugar No texto. Usaria apenas like/regexp para correspondência da inicial, como REGEXP '^word' ou LIKE 'word%' - se um índice pode ser utilizado.