Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

php/mysql. Existe função mysql para detectar se pelo menos 2 certas palavras existem em pelo menos um campo de linha mysql


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.