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.