Mysql
 sql >> Database >  >> RDS >> Mysql

php/mysql. Esiste una funzione mysql per rilevare se esistono almeno 2 determinate parole in almeno un campo riga mysql

Penso che tu voglia usare Ricerca booleana full-text

Se abbini senza operatori + - contro come green red blue vengono restituite tutte le righe, dove un record contiene almeno una parola:green o red o blue .

IN BOOLEAN MODE e senza operatori ogni parola abbinata segnerà 1 . Quindi, se c'è un record che corrisponde a due delle tre parole, segnerebbe 2 .

Per ottenere le righe con almeno 2 punti:

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

In modalità Linguaggio naturale il punteggio funziona in modo completamente diverso. Penso che sia basato principalmente su BM25 .

Su grandi set di dati ricerca booleana fulltext (usando un indice fulltext ) di solito supera REGEXP o LIKE di gran lunga se le parole corrispondenti da qualche parte nel testo. Userebbe solo like/regexp per la corrispondenza dall'iniziale come REGEXP '^word' o LIKE 'word%' - se è possibile utilizzare un indice.