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.