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.